我正在为我正在处理的服务编写一些包装函数,并且尝试在Realm对象上使用setValue forKey时遇到了一个奇怪的问题。对象继承自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以包含完整的协议定义
答案 0 :(得分:2)
因为如果您在associatedtype Object
协议中定义Saveable
,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)
}
}
...
}