在Swift中使用Realm Objective-C时声明RLMArray属性

use*_*542 2 realm swift

class Post: RLMObject {
    var images: RLMArray!
    override init(JSON:json) {
        if let imagesArray = dictionary["images"].arrayObject {
            let imagesItems = RLMArray(objectClassName: StringObject.className())
            for dic in imagesArray {
                let image = StringObject(stringValue: dic as! String)
                imagesItems.addObject(image)
            }
            images = imagesItems
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

上面我尝试初始化的代码PostModel包括images属性,但是它始终在我的项目中崩溃:

RLMArray对象类型不支持'(null)'。RLMArrays只能包含RLMObject子类的实例

我在Realm Swift的文档中看到了用于List<Foo>声明数组属性的方法,但是我不知道该如何做。

bda*_*ash 5

在Swift中使用Realm的Objective-C API时,应使用默认值声明数组属性,该默认值是RLMArray具有适当对象类名称的实例。例如:

class Post: RLMObject {
    dynamic var images = RLMArray(objectClassName: StringObject.className())

    // …
}
Run Code Online (Sandbox Code Playgroud)

还要注意dynamic修饰符的存在。这是确保将属性的访问动态分派到RLMObject创建的属性的getter和setter所必需的。