我需要检查我什么时候遍历了最后一项。我不能把该行放在我的for循环之后,因为那样我总是收到一个空列表。我尝试了下面的方法,但是这个方法不起作用:
.observeSingleEvent(of: .value, with: { (snapshot) in
if snapshot.exists() {
for rest in snapshot.children.allObjects.count as! [DataSnapshot] {
let refi = Database.database().reference().child("Users")
refi.observeSingleEvent(of: .value, with: { (snapshoti) in
if snapshoti.value as! String == "active"{
let userid = rest.key
self.someProtocol[rest.key] = self.checksum
if self.checksum == self.someProtocol.count-1 {
self.sortUsers()
} else {
}
self.checksum = self.checksum+1
}
})
}
}
6条答案
按热度按时间xmq68pz91#
dr_barto的答案将起作用,但需要进行以下修改:
从Apple文档:
endIndex是数组的“结束后”位置-即比最后一个有效下标参数大一的位置
wixjitnu2#
如果你不想使用index,你可以像这样检查元素:
cs7cruho3#
EDIT我的答案不起作用,因为(正如注解中指出的)
endIndex
永远不会匹配从enumerated
返回的任何索引值,因为它表示最后一个元素 * 之后的 * 索引。请参阅https://stackoverflow.com/a/53341276/5471218了解如何正确地完成:)正如评论中所指出的,您应该使用
enumerated
;给定一个array
,可以这样使用它:3wabscal4#
也可用作扩展:
或
uurv41yg5#
对于像我这样的新手在斯威夫特。。我附上了完整的代码。
nue99wik6#
尝试此解决方案
P.S:假设snapshot.children.allObjects是[数据快照]的数组