我正在尝试编写一个搜索函数,该函数将在表视图中返回搜索的用户。用户数据保存在Firestore数据库中(buddiesCollectionRef)。当我尝试将从 firestore 获取的数据分配到如下所示的字典数组中时,我可以成功地从 firestore 获取数据:private var users = [[String: String]]()
, 我收到错误
的值分配给类型"[[字符串:字符串]]">
请帮忙。
func searchUsers(query: String) {
//check is array has firebase results
if hasFetched {
//filter results
filterUsers(with: query)
} else {
//fetch and then filter reults
buddiesCollectionRef.addSnapshotListener { snapshot, error in
guard let snap = snapshot else {
debugPrint("Error fetching documents: (String(describing: error))")
return
}
for document in snap.documents{
if let userInfo = document.data() as? [String: String] {
let name = userInfo["name"] ?? ""
let userId = userInfo["uid"] ?? ""
//test
print("name: (name), uid: (userId)")
// update users array with fetched users
self.hasFetched = true
self.users = userInfo
self.filterUsers(with: query)
}
}
}
}
}
func filterUsers(with term: String){
guard hasFetched else {
return
}
self.spinner.dismiss()
let results: [[String:String]] = self.users.filter ({
guard let name = $0["name"]?.lowercased() else {
return false
}
print(name)
return name.hasPrefix(term.lowercased())
})
self.results = results
updateUI()
}
[[String: String]]
和[String: String]
的类型不同。因此,您无法将一个分配给另一个。
[String: String]
:具有String
键和值的字典,即:Dictionary<String, String>
。[[String: String]]
:字典的数组,即:Array<Dictionary<String, String>>
。
从您拥有的 for 循环来看,我假设您想附加它们?试试这个:
self.users.append(userInfo)