swift - 模型的忽略属性似乎没有使用 init 设置(值 : Any)

标签 swift realm

我遇到无法通过 init(value: Any) 设置忽略属性的问题。我理解被忽略的属性的方式是它们存在于对象的实例中,一旦对象被持久化到 Realm,它们将被忽略,但似乎它们在初始化期间已经被忽略了。

例子:

型号:

class Image: Object {

    dynamic var main = false
    dynamic var image: UIImage?

    override static func ignoredProperties() -> [String] {
        return ["image"]
    }
}

用法:

let img = Image(value: [PROPERTY.MAIN: imageSlot.imageInfo.main, PROPERTY.IMAGE: imageSlot.imageInfo.image])
img.image // NIL HERE

let img = Image(value: [PROPERTY.MAIN: imageSlot.imageInfo.main])
img.image = imageSlot.imageInfo.image
img.image // CORRECTLY SET

有点烦人的是我无法在 init(value: Any) 中设置它,因此我想知道这是预期的行为还是我做错了什么。

最佳答案

这是目前的预期行为。 Object.init(value:) 初始化程序目前只考虑持久属性的键。

https://github.com/realm/realm-cocoa/issues/3495

解决方案是您可以定义自定义初始化程序,例如 init(main: Bool, image: UIImage?)

class Image: Object {
    dynamic var main = false
    dynamic var image: UIImage?

    convenience init(main: Bool, image: UIImage?) {
        self.init()
        self.main = main
        self.image = image
    }

    override static func ignoredProperties() -> [String] {
        return ["image"]
    }
}

然后你可以像下面这样使用它:

let img = Image(main: imageSlot.imageInfo.main, image: imageSlot.imageInfo.image)

关于swift - 模型的忽略属性似乎没有使用 init 设置(值 : Any),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45399570/

相关文章:

ios - 将 RxDataSource 添加到 UICollectionView 时 Xcode 崩溃

ios - 如果没有连接、Internet 或其他方式获取 URL 的内容,则 XMLParser 的子类会因 contentsOfURL 初始值设定项而崩溃

ios - Realm 数据库迁移,添加新对象并修改旧对象

swift - 从 HTML 加载图像到 UITextview/WKWebView

swift - Swift 中 Lazy var 和 var as-a-closure 的区别

android - RealmObject 无效,因此无法复制

swift - Realm 类名称与数据库中的存储名称不同

android - Realm 和 Looper 恶作剧

arrays - JSON 与数组中的字典

ios - 如何在 iOS 上压缩 Realm DB?