检索tableview Swift的域属性计数

我正在使用Realm 3和Swift 4,它仍然是Realm和Swift的新手。 这里需要指导:)

鉴于这个领域模型

class Person: Object, Mappable { let dog = List() required convenience init?(map: Map) { self.init() } } 

我怎样才能得到每个人的狗数?

我想要实现的是我的桌面视图中有多个部分,每个人都会有相应人员的狗列表。

 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { let owner = realm.objects(Person.self) return owner.dog.count // This is not working. What should I change it to ? } 

我一直在网上搜索,但找不到任何关于这个问题的指南。

任何帮助都非常感谢。 谢谢!

我可能会将var dog重命名为var dogs,以表明它可能包含多只狗。

这是一个简单的解决方案,可以打印所有者姓名和狗数。

 do { let realm = try Realm() let people = realm.objects(Person.self) for person in people { let name = person.personName print(name) let dogs = person.dogs print(dogs.count) } } catch let error as NSError { print(error.localizedDescription) } 

领域列表具有arraysfunction,因此可以迭代,计数可用,也可以进行过滤。

你问题中的代码

 let owners = realm.objects(Person.self) 

将Realm中的所有Person对象分配给所有者var(Person的数组),因此它不是一个人,这就是为什么它没有.dog属性。

您将需要在tableView的每个部分中确定应该是哪个人,为该人查询Realm然后返回person.dogs.count。

用于确定如何确定哪个人在哪个部分中未显示在原始问题中的代码,但假设您希望在第0部分中找到人0(可能存在排序问题,因此这只是概念性的)

 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { let owners = realm.objects(Person.self).sorted('name') let thisOwner = owners[section] let dogCount = thisOwner.dogs.count return dogCount } 

你尝试过查询逻辑吗?

 realm.objects(Person).filter("dogs.@count > 0") 

要么

 realm.objects(Person).filter("ANY dogs.@count > 0")