如何使用Swift迭代Realm中的结果

时间:2016-08-06 17:16:32

标签: swift realm

我正在尝试从Swift 2中的Realm查询迭代结果。存储了两个PersonClass对象。

查询的结果var有效且包含两个PersonClass对象,但在迭代结果时,name属性为空字符串。

class PersonClass: Object {
    var name = ""
}

let realm = try! Realm()

@IBAction func button0Action(sender: AnyObject) {
  let results = realm.objects(PersonClass)

  print(results) //prints two PersonClass object with the name property populated

  for person in results {  
      let name = person.name
      print(name) //prints and empty string   
  }
}

2 个答案:

答案 0 :(得分:7)

问题是您已从模型类中的属性声明中省略了dynamic修饰符。 dynamic修饰符是确保Realm有机会拦截对属性的访问权限所必需的,这使得Realm有机会从磁盘上的文件读取/写入数据。省略此修饰符会导致Swift编译器直接访问实例变量,从而将Realm从循环中删除。

答案 1 :(得分:0)

动态

告诉运行时对函数或变量修改的静态分派使用动态分派

将@objc属性隐式添加到变量或函数声明中。

使用dynamic关键字的任何东西都使用Objective-C运行时而不是Swift运行时来向它发送消息。

动态对于应用分析情况很有用,但牺牲了静态调度提供的优化。

动态调度与依赖于KVC / KVO的Core Data等Objective-C运行时函数增加了更好的互操作性。

来自Swift语言参考

  

将此修饰符应用于可以表示的类的任何成员   通过Objective-C。使用动态标记成员声明时   修饰符,始终使用动态调度对该成员的访问   Objective-C运行时。永远不会内联或访问该成员   由编译器虚拟化。