UserDefaults를 사용해서 기존의 PrimitiveData(Int,String...)말고 Object를 저장해보자 이 방식은 누군가 Dictionary 와 Codable개념을 통해서 만든방식인거같아 보인다
struct CoadbleObject: Codable {
var value: Int
var value2: String
var value3: Date
var value4: Double
var value5: Bool
}
extension UserDefaults {
func setCoableObeject<T: Codable>(_ data: T?, forKey defaultName:String) {
let encoded = try? JSONEncoder().encode(data)
set(encoded, forKey: defaultName)
}
func codableObject<T : Codable>(dataType: T.Type, key: String) -> T? {
guard let userDefaultData = data(forKey:key) else {
return nil
}
return try? JSONDecoder().decode(T.self, from: userDefaultData)
}
}
let key = "foo_key"
let codableObject = CoadbleObject(value: 100, value2: "Hello", value3: Date(), value4: 3.141592, value5: false)
UserDefaults.standard.setCoableObeject(codableObject, forKey: key)
if let retrieveCodableObject = UserDefaults.standard.codableObject(dataType: CoadbleObject.self, key: key) {
print(retrieveCodableObject.value)
print(retrieveCodableObject.value2)
print(retrieveCodableObject.value3)
} else {
print("Not yet Saved With Key \(key)")
}![](https://velog.velcdn.com/images/dnrur124/post/35285ba5-dd02-4f50-bc95-c07bc1b5ce10/image.png)
![](https://velog.velcdn.com/images/dnrur124/post/45ee91ce-f8ba-4a0f-a0c0-db1f19705536/image.png)
![](https://velog.velcdn.com/images/dnrur124/post/97bb25ef-fd55-46b4-9f95-be37fd9803f6/image.png)
위의 사용된 Model 프로퍼티 값을 유저디퐅트를 사용하여 저장해보았고 또 오브젝트자체를 유저디폴트에 저장해봤다
저장하게 되면 스크린샷에 나와있듯이 JSONData형태로 저장된다
추가적으로
UserDefaults를 통해서 내프로젝트의 데이터를 영구적으로 저장해았음
프로젝트깃허브: https://github.com/David-ShinDJ/NC-David.git