我遇到无法通过 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/