gpt4 book ai didi

ios - 在 Firebase DataSnapshot 数组中查找自定义对象的索引

转载 作者:行者123 更新时间:2023-11-28 15:00:50 24 4
gpt4 key购买 nike

我刚刚开始使用 Firebase

这是 Firebase 上的 JSON :

{
"messages" : {
"-K2ib4H77rj0LYewF7dP" : {
"name" : "anonymous",
"text" : "Hello"
},
"-K2ib62mjHh34CAUbide" : {
"name" : "anonymous",
"text" : "I am fine"
},
"Test" : {
"name" : "test111",
"text" : "text22"
}
}
}

在 Swift 中,我观察在服务器上添加/删除项目时,它应该反射(reflect)在应用程序中。添加记录工作正常。但是对于删除,我不确定如何根据索引从数组中删除项目。使用 indexOf 返回一个地址(我猜数组不会在没有映射的情况下删除对象)。

这是我试过的错误代码,但不起作用:

_refHandle = self.ref.child("messages").observe(.childRemoved, with: { [weak self] (snapshot) -> Void in
guard let strongSelf = self else { return }

let values = snapshot.value as? NSDictionary
let indexToBeRemoved = strongSelf.messages.index(where: {
let valuesFilter = $0.value as? NSDictionary
valuesFilter!["name"] as! NSString === values!["name"] as! NSString
return true
})
print(indexToBeRemoved)
strongSelf.messages.remove(at: indexToBeRemoved!)
strongSelf.clientTable.deleteRows(at: [IndexPath(row: indexToBeRemoved!, section: 0)], with: .automatic)
})

indexToBeRemoved 结果为 0。

我还尝试使用 this 简单地删除对象回答但它返回了一个地址。

预期结果:

获取要删除的DataSnapshot对象的索引

最佳答案

所以这对我有用:

_refHandle = self.ref.child("messages").observe(.childRemoved, with: { [weak self] (snapshot) -> Void in
guard let strongSelf = self else { return }

let values = snapshot.value as? NSDictionary
let indexToBeRemoved = strongSelf.messages.index(where: {
let valuesFilter = $0.value as? NSDictionary
return valuesFilter!["name"] as! NSString === values!["name"] as! NSString
})

print(indexToBeRemoved)
strongSelf.messages.remove(at: indexToBeRemoved!)
strongSelf.clientTable.deleteRows(at: [IndexPath(row: indexToBeRemoved!, section: 0)], with: .automatic)
})

我把比较的结果返回给索引。

但我认为这不是实现这一目标的最佳方式。因为在 JSON 中,可能没有唯一的键(我用 name 进行比较)。
我真的很想看到一个更好的解决方案。

关于ios - 在 Firebase DataSnapshot 数组中查找自定义对象的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48927378/

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