我想将我的对象保存到 NSUserDefaults
中。
这是我的模型:
class User: SafeJson {
var email: String?
var name: String?
}
SafeJson:
class SafeJson: NSObject {
override func setValue(_ value: Any?, forKey key: String) {
let uppercasedFirstCharacter = String(key.first!).uppercased()
let range = NSMakeRange(0, 1)
let selectorString = NSString(string: key).replacingCharacters(in: range, with: uppercasedFirstCharacter)
let selector = NSSelectorFromString("set\(selectorString):")
let responds = self.responds(to: selector)
if !responds {
print("\n\n\n*******--->\(selector) key is missing in API response...<---*******\n\n\n")
return
}
super.setValue(value, forKey: key)
}
}
通过以下方式创建UserObj
:
let UserObj = User()
UserObj.setValuesForKeys(responseOfAPI)
现在我想将 UserObj
保存到 NSUserDefaults
但不知道该怎么做...
而且我不想在我的模型类中使用 required init(coder aDecoder: NSCoder)
和 func encode(with aCoder: NSCoder)
因为有太多用户模型的许多属性。
谢谢!!
最佳答案
通常,您无法将对象序列化为UserDefaults
。
但是,由于您使用的是 JSON,因此可以使用 Codable类型将对象转换为 JSON 或从 JSON 转换以进行存储。
[*]需要注意的是 Any
不可编码。使类型可编码的最简单方法是使用已可编码的类型声明其属性。这些类型包括标准库类型,例如 String
、Int
和 Double
;以及基础类型,例如 Date
、Data
和 URL
。任何属性可编码的类型只需声明一致性即可自动符合 Codable。
这是一个简化的示例:
//: Playground - noun: a place where people can play
import UIKit
class SafeJson: Codable {
var strValues:[String:String] = [:]
var intValues:[String:Int] = [:]
func setValue(_ value: String?, forKey key: String) {
strValues[key] = value
}
func setValue(_ value: Int?, forKey key: String) {
intValues[key] = value
}
}
let encoder = JSONEncoder()
let decoder = JSONDecoder()
let sampleObject = SafeJson()
sampleObject.setValue(12, forKey: "intValue1")
sampleObject.setValue(12345, forKey: "intValue2")
sampleObject.setValue("Banana", forKey: "yellowFruit1")
sampleObject.setValue("Orange", forKey: "orangeFruit1")
let encoded = try encoder.encode(sampleObject)
let key = "encodedObj"
UserDefaults.standard.setValue(encoded, forKey: key)
if let readValue = UserDefaults.standard.value(forKey: key) as? Data {
let decodedObj = try decoder.decode(SafeJson.self, from: readValue)
print("Decoded to \(decodedObj)")
}
关于ios - 将自定义对象保存到 NSUserDefaults,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50683025/