尝试在Realm对象

时间:2016-05-18 20:49:34

标签: swift realm

我正在为我正在处理的服务编写一些包装函数,并且尝试在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以包含完整的协议定义

1 个答案:

答案 0 :(得分:2)

因为如果您在associatedtype Object协议中定义Saveableassociatedtype 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)
        }
    }
    ...
}