Open DojinPark opened 1 year ago
// 데이터 저장
UserDefaults.standard.set("test", forKey: "test")
// 데이터 불러오기 let test2:String = UserDefaults.standard.string(forKey: "test")!
- 저장해야하는 갯수가 증가한다면, 위 작업을 계속 반복한다면 코드의 가독성이 떨어질 수도 있다.
- 다음과 같이 매크로로 구현을 한다면 좀 더 간편하게 매번 저장할 수 있음.
```swift
/// 구현 방법
@propertyWrapper
struct testSave<T> {
let key: String
let defaultValue: T
var wrappedValue: T {
get {
UserDefaults.standard.object(forKey: self.key) as? T ?? self.defaultValue
}
set {
UserDefaults.standard.set(newValue, forKey: self.key)
}
}
}
/// 사용법
@LocalSave(key: "test", defaultValue: "")
private var test: String
더 나아가서 JSONEncoder로 serialize하여 data형태로도 저장가능하도록 구현할 수 있다.
@propertyWrapper
struct testSave<T: Codable> {
let key: String
let defaultValue: T
var wrappedValue: T {
get {
if let data = UserDefaults.standard.object(forKey: self.key) as? Data {
if let object = try? JSONDecoder().decode(T.self, from: data) {
return object
}
}
return self.defaultValue
}
set {
guard let encoded = try? JSONEncoder().encode(newValue) else { return }
UserDefaults.standard.setValue(encoded, forKey: self.key)
}
}
}
ClassAndStruct-main.zip
수연님 요청 수정본 (Array 재할당 실험) ClassAndStruct.zip