在 NSUserDefaults 和 Realm 中保存一个对象
Save an object in NSUserDefaults and Realm
是否可以在 NSUserDefaults 和 Realm (Swift) 中保存对象?
我在创建模型时发现了一个问题,因为 NSUserDefaults 需要继承 NSObject
而 Realm 需要继承 Object
。
这样做,引发了这个错误
Multiple inheritance from classes 'Object' and 'NSObject'
使用 Swift4 的 Codable
协议,您可以将自定义 class 保存到 UserDefaults
,而无需遵守旧的 NSCoding
协议。
class Team: Object, Codable {
@objc dynamic var id:Int = 0
@objc dynamic var name:String = ""
}
let team = Team()
team.id = 1
team.name = "Team"
let encodedTeam = try! JSONEncoder().encode(team)
UserDefaults.standard.set(encodedTeam, forKey: "team")
let decodedTeam = try! JSONDecoder().decode(Team.self, from: UserDefaults.standard.data(forKey: "team")!)
这解决了多重继承的问题,因为您的类型不再需要从 NSObject
继承。
是否可以在 NSUserDefaults 和 Realm (Swift) 中保存对象?
我在创建模型时发现了一个问题,因为 NSUserDefaults 需要继承 NSObject
而 Realm 需要继承 Object
。
这样做,引发了这个错误
Multiple inheritance from classes 'Object' and 'NSObject'
使用 Swift4 的 Codable
协议,您可以将自定义 class 保存到 UserDefaults
,而无需遵守旧的 NSCoding
协议。
class Team: Object, Codable {
@objc dynamic var id:Int = 0
@objc dynamic var name:String = ""
}
let team = Team()
team.id = 1
team.name = "Team"
let encodedTeam = try! JSONEncoder().encode(team)
UserDefaults.standard.set(encodedTeam, forKey: "team")
let decodedTeam = try! JSONDecoder().decode(Team.self, from: UserDefaults.standard.data(forKey: "team")!)
这解决了多重继承的问题,因为您的类型不再需要从 NSObject
继承。