data(using: .utf8, allowLossyConversion: false)! << 왜 옵셔널인가요?

1 답변 글타래를 보이고 있습니다
  • 글쓴이
    • Ky J
      참가자
      • 글작성 : 4
      • 답글작성 : 0
      1,220 포인트
      func save(_ service: String, account: String, value: String) {
      let keychainQuery: NSDictionary = [
      kSecClass: kSecClassGenericPassword,
      kSecAttrService: service,
      kSecAttrAccount: account,
      kSecValueData: value.data(using: .utf8, allowLossyConversion: false)!
      }
      

      안녕하세요. 키체인 코드를 공부중입니다!

      data(using: .utf8, allowLossyConversion: false)! << 옵셔널이던데..

      이유가 왜 그런지 궁금합니다..  엄청 찾아봤지만 시원하게 해결이 안됩니다 ㅠㅠ ㅎㅎ

      utf8은 모든 유니코드를 변환 할 수 있다고 해서 !로 해도 문제 없다는데 애초에 data()가 왜 옵셔널인가요?

      혹시 유저가 친 키보드 데이터 String이 String?이기 때문에 그런건가요??

      0
    • 야곰
      키 마스터
      • 글작성 : 37
      • 답글작성 : 501
      15,880 포인트

      작성하신 코드에는 매개변수를 .utf8로 보냈지만, 메서드 자체적으론 다른 인코딩 방식도 매개변수로 받을 수 있으므로, 실패의 가능성을 내포한다고 봅니다.
      그래서 메서드 자체가 utf8 데이터로 변환하는 메서드였다면 예상한 것처럼 옵셔널이 아닌 값을 반환할지도 모르겠지만, 메서드 자체가 여러 인코딩의 여러 가능성을 내포하기에 옵셔널 타입으로 반환하는게 아닐까요?

      0
1 답변 글타래를 보이고 있습니다
  • 답변은 로그인 후 가능합니다.

logo landscape small

사업자번호 : 260-27-00477
통신판매업 신고번호 : 제 2020-충북청주-0663 호
고객센터 : 카카오톡채널 @yagom