Model的Ignored属性似乎没有使用init设置(值:Any)

时间:2017-07-30 11:59:39

标签: swift realm

我遇到的问题是我无法通过Realm设置被忽略的属性。我理解忽略属性的方式是它们存在于Object的实例中,一旦对象持久保存到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

用法:

{{1}}

有点烦人的是我不能在init(值:Any)中设置它,因此我想知道这是出于预期的行为还是我做错了。

1 个答案:

答案 0 :(得分:0)

这是目前的行为。 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)