UserDefault 儲存應用
1. 儲存 struct
struct 格式範例:
1 2 3 4 5 6 7 8 9
| struct UserInfo: Codable {
var name:String? var email:String? var id:String? }
|
要儲存的 struct 必須遵守Codable的協定才可使用JSONEncoder作轉換
儲存方法
1 2 3 4 5 6 7 8 9 10
| func setUserInfo(userInfo:UserInfo) {
if let value = try? JSONEncoder().encode(userInfo) { UserDefaults.standard.set(value, forKey: "userInfo") UserDefaults.standard.synchronize() } }
|
UserDefaults.standard.set(value, forKey: "userInfo")
這裡的userInfo可以替換成自定義的key
取得方法
1 2 3 4 5 6 7 8 9 10 11 12
| func getUserInfo() -> UserInfo? { if let data = UserDefaults.standard.data(forKey: "userInfo") { let userInfo = try? JSONDecoder().decode(UserInfo.self, from: data) return userInfo } return nil }
|
UserDefaults.standard.data(forKey: "userInfo")
如果沒有key, UserDefaults會回傳空值
2. 儲存顏色
儲存方法
1 2 3 4 5 6 7 8 9
| func setPreferColor(color:UIColor) { UserDefaults.standard.set(NSKeyedArchiver.archivedData(withRootObject: color), forKey: "preferColor") UserDefaults.standard.synchronize() }
|
UIColor 需要透過 archivedData 轉為Data才可儲存,否則之後取出會為nil
取得方法
1 2 3 4 5 6 7 8 9 10 11
| func getPreferColor() -> UIColor? { if let savedData = UserDefaults.standard.object(forKey: "preferColor") as? Data { return NSKeyedUnarchiver.unarchiveObject(with: savedData) as? UIColor } return nil }
|
註:
後來找到的參考網站