我正在为我正在处理的服务编写一些包装函数,并在尝试对 Realm 对象使用 setValue forKey 时遇到了一个奇怪的问题。 Object 继承自 NSObject,所以这应该不是问题
protocol Saveable {
associatedtype Object
// Save a Realm Object from a JSON response
static func save(item: AnyObject, realm: Realm) -> Object?
}
extension Saveable {
static func setString(o: Object, field:String, value: String, realm: Realm) {
try! realm.write {
o.setValue(value, forKey: field)
}
}
static func setInt(o: KidObject, field:String, value: Int, realm: Realm) {
try! realm.write {
o.setValue(value, forKey: field)
}
}
}
第一个方法 setString 给我这个错误: “Self.Object”类型的值没有成员“setValue”
第二个有效,KidObject 中没有任何内容:
import RealmSwift
class KidObject: Object {
}
让我的模型扩展 KidObject 是“好的”,但我想了解为什么会这样
谢谢!
更新 05/27/2016 以包括完整的协议(protocol)定义
最佳答案
因为如果你在Saveable
协议(protocol)中定义associatedtype Object
,associatedtype Object
会因为冲突隐藏RealmSwift的Object
类型姓名。
如果你想识别每个 Object
类型,你应该使用 RealmSwift.Object
来表示 RealmSwift 的 Object
类型。像下面这样:
extension Saveable {
static func setString(o: RealmSwift.Object, field:String, value: String, realm: Realm) {
try! realm.write {
o.setValue(value, forKey: field)
}
}
...
}
关于swift - 尝试在 Realm 对象上使用 setValue forKey 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37309870/