swift - 尝试在 Realm 对象上使用 setValue forKey 的问题

标签 swift realm

我正在为我正在处理的服务编写一些包装函数,并在尝试对 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 Objectassociatedtype 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/

相关文章:

swift - 快速删除字符串尾随空白的最干净方法?

ios - 如何使用 AVPlayer 播放 instagram 视频

swift - Swift 4 中的尾递归(尾调用优化)

ios - 在 XCode 中随机化颜色

ios - 带有函数的 NSPredicate

ios - 在 tabBar 上将 isTranslucent 设置为 false 会使我的底部按钮消失

android - 无法避免 io.realm.exceptions.RealmMigrationNeededException

ios - 在不重新启动应用程序的情况下更改 Realm 文件

dependencies - RLMLinkingObjects 循环依赖

Android Realm - 调试