如何在Swift 4中保留Realm List属性?

dr_*_*rto 4 realm ios swift4

使用Swift 4和Realm 3.0.1,我想将Realm对象列表存储在父Realm对象的属性中.我遇到了以下问题:

在Swift 4中,应该持久保存到Realm中的属性必须是@objc dynamic,例如@objc dynamic var id: String = "".但是,Realm的Array替换类型,List不能以这种方式存储:@objc dynamic var children: List<Child>? = nil导致此编译器错误:

属性不能标记为@objc,因为其类型无法在Objective-C中表示

有关更多上下文,这是一个完整的示例:

final class Child: Object {
  @objc dynamic var name: String = ""
}

final class Parent: Object {
  // this fails to compile
  @objc dynamic var children1: List<Child>?

  // this compiles but the children will not be persisted
  var children2: List<Child>?
}
Run Code Online (Sandbox Code Playgroud)

那么还有另一种在Realm和Swift 4中存储对象列表的方法吗?

all*_*enh 12

境界List永远不可能nil,而且他们不需要@objc dynamic.他们应该只是let,虽然我在文档中找不到特别提到的内容,但是有一个领域贡献者的评论,专门用它来表达

文档中有一个属性备忘单.

let dogs = List<Dog>()
Run Code Online (Sandbox Code Playgroud)

  • @Jan`realm.write {dogs.removeAll(); dogs.append(Dog())}`。这可能导致狗脱离。您可以执行realm.write {person.dogs.forEach {realm.delete($ 0)}; person.dogs.append(Dog())}`。取决于您的情况。 (3认同)