swift - 如何获取所有对象中某个对象是它们的属性?

标签 swift realm

class House: Object {
   @objc dynamic var address: Address?
}

class Shop: Object {
   @objc dynamic var address: Address?
}

class Address: Object {}

如果我有一个地址对象,如何获取与其关联的所有对象(商店和房屋),或者至少获取对象计数。

最佳答案

让我们使用直接方法来使用具体示例:

假设您有问题中概述的三个对象

class Address: Object {
    @objc dynamic var street: String?
}

class House: Object {
    @objc dynamic var address: Address?
}

class Shop: Object {
    @objc dynamic var address: Address?
}

现在创建一些对象并存储在 Realm 中。定义两个地址 a0、a1 和三个房屋 h0、h1、h2,确保房屋 0 和 2 具有地址 a0。让我们也创建一个商店 (s0) 并给它地址 0。

let a0 = Address()
a0.street = "123 Here Road"

let a1 = Address()
a1.street = "456 There Road"

let h0 = House()
h0.address = a0

let h1 = House()
h1.address = a1

let h2 = House()
h2.address = a0

let s0 = Shop()
s0.address = a0
and write it to realm

try! realm.write {
    realm.add(h0)
    realm.add(h1)
    realm.add(h2)
    realm.add(s0)
}

假设我们想要获取地址以 123 开头的对象,然后获取与该地址关联的房屋和商店的数量。为了简洁起见,我没有包含任何真正的错误检查

let addressResults = realm.objects(Address.self).filter("street BEGINSWITH[cd] '123'")
let myAddressObject = addressResults.first!

let houseResults = realm.objects(House.self).filter("address == %@", myAddressObject)
print("house count: \(houseResults.count)")

let shopResults = realm.objects(Shop.self).filter("address == %@", myAddressObject)
print("shop count: \(shopResults.count)")

和结果

house count: 2
shop count: 1

作为替代解决方案,您可以定义地址、房屋和商店之间的关系。保留上面的房屋和商店对象,像这样更改地址对象

class Address: Object {
    @objc dynamic var street: String?

    let houses = List<House>()
    let shops = List<Shop>()
}

然后创建一些对象并写入 Realm 。

let h0 = House()
let h1 = House()
let h2 = House()

let s0 = Shop()

let a0 = Address()
a0.street = "123 Here Road"
a0.houses.append(h0)
a0.houses.append(h1)
a0.shops.append(s0)

let a1 = Address()
a1.street = "456 There Road"
a1.houses.append(h2)

然后获取每个地址的房屋和商店数量:

let addressResults = realm.objects(Address.self)

for address in addressResults {
    let street = address.street!
    let houseCount = address.houses.count
    let shopCount = address.shops.count
    print("street: \(street) has \(houseCount) houses and \(shopCount) shops")
}

和输出

street: 123 Here Road has 2 houses and 1 shops
street: 456 There Road has 1 houses and 0 shops

关于swift - 如何获取所有对象中某个对象是它们的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53679698/

相关文章:

ios - 当我安装 Pod 时,QuadratTouch 出现错误? - swift 3

ios - UILabel 具有来自编程约束的内部填充

swift - 如何在多个 UITableView 中保留导航栏

ios - 扩展 UINavigationBar 高度

android - Xamarin Realm 没有 realobject 链接器剥离了它们

android - Realm.io - 是否可以通过其子对象找到对象?

ios - 无法更新 Realm 对象

swift - 什么时候需要执行 `reduce` 的内容?

ios - 为什么协议(protocol)在 swift 中优于类?

ios - Realm 不想更新 RLMObject 属性的值