gpt4 book ai didi

ios - Swift -FirebaseDatabase 如何计算和迭代仅是 keyId 的子项?

转载 作者:行者123 更新时间:2023-11-29 05:19:22 25 4
gpt4 key购买 nike

我的布局是这样的

@locationRef
|
@---LtFirstKeyUqABC123
| |--key1:val1
| |--key2:val2
|
@---LtLastKeyrUqXYZ789
| |--key1:val1
| |--key2:val2
|
|---address: "123 Broadway"
|---city: "Bronx"
|---state: "NY"
|---zipcode: "10025"
|---country: "United States"

我只想计算和迭代 Firebase KeyID,而不是其他数据。例如,上面的 locationRef 有 7 个子项,但这 7 个子项中只有 2 个是 keyId(LtFirstKeyUqABC123LtLastKeyrUqXYZ789),它们有自己的 2每个 child 。

var startKey: String?
var totalCountOfKeyIds = 0

Database.database().reference().child("locationRef")
.queryOrderedByKey()
.queryLimited(toLast: 10)
.observeSingleEvent(of: .value) { (snapshot) in

if !snapshot.exists() {
self.totalCountOfKeyIds = 0
return
}

for childSnapshot in snapshot.children {

let snap = childSnapshot as! DataSnapshot

// totalCountOfKeyIds = Int(snap.childrenCount) doesn't work
print(Int(snap.childrenCount)) // on every loop this gives me the 2 children under each keyId

if snap.exists() {

// loop through children
guard let children = snap.children.allObjects.first as? DataSnapshot else { return }
for child in snap.children.allObjects as! [DataSnapshot] {

if let dict = child.value as? [String: Any] {
// get dict values
}
}
self.startKey = children.key
}
}
})

完成后,totalCountOfKeyIds 应仅等于 2,而 startKey 应为 LtLastKeyrUqXYZ789

我该怎么做?

最佳答案

出于多种原因,在一个节点下混合不同的实体类型是一个坏主意,其中之一就是您在此处遇到的原因。我建议重构您的数据模型,使其具有两个顶级列表,名称属性位于其中一个列表下,推送 ID 位于另一个列表下。

也就是说,在您当前的结构上,您可以通过以下方式获取计数:

  1. 排除您不想计数的属性。
  2. 减去您不想计算的属性数量。

第一个看起来像这样:

let excludedKeys = ["address", "city", "state", "zipcode", "country"]
Database.database().reference().child("locationRef")
.queryOrderedByKey()
.queryLimited(toLast: 10)
.observeSingleEvent(of: .value) { (snapshot) in
self.totalCountOfKeyIds = 0

for childSnapshot in snapshot.children.allObjects as! [DataSnapshot] {
for child in childSnapshot.children.allObjects as! [DataSnapshot] {
if !excludedKeys.contains(child.key) {
self.totalCountOfKeyIds = self.totalCountOfKeyIds + 1
}
}
}
})

关于ios - Swift -FirebaseDatabase 如何计算和迭代仅是 keyId 的子项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58825207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com