-
Swift - UserDefaults에 customType 저장하기Programming/Swift 2022. 3. 1. 22:32
안녕하세요 BeePeach입니다 :)
UserDefaults를 사용하다보면 String, Int, Bool, Data 타입 이외의 타입을 저장하고 싶을 때가 있습니다.
Custom Type이나 Array, Tuple등을 저장하고 싶은데 저장하려고 하면 에러가 발생하는데요.
오늘은 UserDefault에 원하는 데이터를 저장하는 방법에 대해서 공부해보도록 하겠습니다.
UserDefaluts 저장하기
화면 구성은 이렇게 되어있습니다.
맨 위의 저장버튼을 누르면 UserDefault에 Person구조체를 저장해보도록 하겠습니다.
이렇게 실행해보면 에러가 발생합니다.
Non-property-list object를 UserDefaults에 저장하려고 한다고 나오네요.
그럼 이 문제를 어떻게 해결할 수 있을까요??
Data형식을 UserDefault에 저장할 수 있다는 부분을 이용하면 쉽게 해결할 수 있습니다.
JSONEncoder, Decoder 이용하기
몇 가지 방법이 존재하는데 우리에게 익숙한 JSONDecoder, Encoder를 이용해보도록 하겠습니다.
이미 JSONDecoder, Encoder를 사용해보셨다면 어려울 게 하나도 없습니다.
핵심 개념은 Encoding을 통해 customType을 Data로 변환시키는 것을 이용한 것입니다.
먼저 Person 구조체가 Codable 프로토콜을 채용하도록 해야겠죠??
그리고 원하는 데이터를 encoding합니다.
여기서는 try?를 사용하고 있는데 에러 처리를 하고 싶다면 do catch문을 이용하시면 됩니다.
그럼 이제 저장할 때도 에러가 나지 않습니다.
UserDefault에 저장된 값을 읽을 때는 Decoding을 통해서 customType으로 변환시켜주면 됩니다.
정말 별거 없죠..?
JSONEncoder, Decoder가 아닌 PropertyListEncoder, Decoder를 이용할 수도 있습니다.
사용방법은 비슷하니 궁금하시다면 한 번 검색해 보시는 것도 추천드립니다!
728x90'Programming > Swift' 카테고리의 다른 글
Swift - Error Handling(throws) (0) 2022.03.25 Swift - Error Handling 기초 (0) 2022.03.24 Swift - reduce(_:_:)와 reduce(into:_:) (0) 2022.01.29 Swift - Generic Type Constraint (0) 2022.01.25 Swift - Generic Type 확장하기 (0) 2022.01.24