无法用索引类型“字符串”下标“ [Any]”类型的值

时间:2019-08-30 01:38:21

标签: swift dictionary

我正在从Firestore检索数据,到目前为止一切都成功了。这是我的控制台中的结果。

[{
    Name = Tuna;
    Price = "$3.6"; }, {
    Name = Snapper;
    Price = "$25.60"; }]

我想将名称和价格存储到变量中,以便可以在表格视图中显示它们。如下面的代码所示,当我将nameOfItem设置为Data2时,出现一个错误,指出“无法用索引类型为'String'的下标'[Any]'类型的值”。我想知道是否有人可以帮助我解决这个问题!

 override func viewWillAppear(_ animated: Bool) {
                    itemCollectionRef.getDocuments { (snapshot, error) in
                        if let err = error {
                            debugPrint("Error fetching docs: \(err)")

                        }else {
                            guard let snap = snapshot else {return}
                            for document in snap.documents {
                                let data2 = document.data()["Items"]! as? Array ?? []
                                print(data2)
                                let RandomVariable = data2[0]
                                print(RandomVariable)

                                let nameOfItem = data2["Name"] as? String ?? ""
                                let priceOfItem = data2["Price"] as? String ?? ""

                                //let priceOfItem = data2["Price"] as? String ?? ""
                                //print(nameOfItem, priceOfItem)

                            }
                        }
                    }

1 个答案:

答案 0 :(得分:0)

如您所见,在控制台输出中没有“ Items”元素之类的东西,而是因为错误消息说您有一个数组,因此将for循环内的代码更改为

let data = document.data() as? [Any] ?? []
for item in data  {
    if let dictionary = item as? [String: String] {
        let nameOfItem = dictionary["Name"] ?? ""
        let priceOfItem = dictionary["Price"] ?? ""
        //...
    }
}