【问题标题】:Assign [String : String]' to type '[[String : String]]'分配 [String : String]' 以键入 '[[String : String]]'
【发布时间】:2021-07-23 12:39:39
【问题描述】:

我正在尝试编写一个搜索函数,该函数将在表格视图中返回搜索到的用户。用户数据保存在 Firestore 数据库(buddiesCollectionRef)中。当我尝试将从 firestore 获取的数据分配到如下所示的字典数组中时,我可以成功地从 firestore 获取数据:private var users = [[String: String]](), 我得到了错误

无法将类型“[String : String]”的值分配给类型“[[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()
    
}

【问题讨论】:

    标签: swift google-cloud-firestore


    【解决方案1】:

    [[String: String]][String: String] 的类型不一样。因此,您不能将一个分配给另一个。

    • [String: String]:带有String 键和值的字典,即:Dictionary<String, String>
    • [[String: String]]:字典数组,即:Array<Dictionary<String, String>>

    从你的 for 循环来看,我假设你想附加它们?试试这个:

    self.users.append(userInfo)
    

    【讨论】:

    • 好的,我现在明白其中的区别了。现在使用 self.users.append(userInfo) 可以完美运行,谢谢!
    猜你喜欢
    • 2017-08-22
    • 2021-09-26
    • 1970-01-01
    • 2022-07-29
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 2021-04-10
    • 1970-01-01
    相关资源
    最近更新 更多