UserDefaults 사용시 매번 긴 코딩하는게 귀찮아서 좋은 예제를 소개합니다.
import Foundation
@propertyWrapper
struct UserDefaultsWrapper<T: Codable> {
private let key: String
private let defaultValue: T
init(key: String, defaultValue: T) {
self.key = key
self.defaultValue = defaultValue
}
var wrappedValue: T {
get {
// Read value from UserDefaults
guard let data = UserDefaults.standard.object(forKey: key) as? Data else {
// Return defaultValue when no data in UserDefaults
return defaultValue
}
// Convert data to the desire data type
//let value = try? JSONDecoder().decode(T.self, from: data)
let value = try? PropertyListDecoder().decode([T].self, from: data)
return value.first ?? defaultValue
}
set {
// Convert newValue to data
// IOS 11 에서 nil 출력됨
// IOS 전체 버전에서 적용될려면 배열로 감싸서 사용해야됨.
//let data = try? JSONEncoder().encode(newValue)
let data = try? PropertyListEncoder().encode([newValue])
// Set value to UserDefaults
UserDefaults.standard.set(data, forKey: key)
UserDefaults.standard.synchronize()
}
}
}
struct UserData {
// 자동로그인 여부
@UserDefaultsWrapper(key: "isAutologin", defaultValue: false)
static var isAutologin: Bool
// 로그인 토큰
@UserDefaultsWrapper(key: "loginToken", defaultValue: "")
static var loginToken: String
// APNS Device Token
@UserDefaultsWrapper(key: "deviceToken", defaultValue: "")
static var deviceToken: String
}
사용방법
UserData.isAutologin = true'Swift > 기타' 카테고리의 다른 글
| [SWIFT]갤러리 및 카메라 사용 UIImagePickerController(디폴트 UI) (0) | 2023.04.20 |
|---|---|
| [SWIFT]네트워크 상태체크 (0) | 2023.04.18 |
| [SWIFT]AppVersion 및 번들아이디 정보확인 (0) | 2023.04.18 |
| [SWIFT]UUID 키체인 활용해서 저장하기 (0) | 2023.04.18 |
| [SWIFT]앱에서 앱 실행하기 (0) | 2023.04.18 |