【问题标题】:how to append an array of dictionaries to another array如何将字典数组附加到另​​一个数组
【发布时间】:2019-02-12 05:25:44
【问题描述】:

我尝试将来自服务器的字典数组附加到全局声明的数组。但我收到一个错误,例如“无法将 '[Any]' 类型的值转换为预期的参数类型 '[String : Any] '"如果有人帮助我会很棒。在此先感谢

var pro = [[String:Any]]()

    var productsdetails = Array<Any>()
    productsdetails = userdata.value(forKey: "products") as! Array
     print("response\(productsdetails)")
               self.pro = self.pro.append(productsdetails)
                    print(self.pro)

【问题讨论】:

  • var productsdetails = Array()
  • 仍然收到相同的错误“无法将类型 '[[String : Any]]' 的值转换为预期的参数类型 '[String : Any]'”
  • 在哪一行??
  • "self.pro = self.pro.append(productsdetails)"

标签: ios swift4


【解决方案1】:

使用下面的代码,我希望它有效

var pro = [[String:Any]]()

if let productsdetails = userdata.value(forKey: "products") as? [[String:Any]] {
    print("response\(productsdetails)")
    self.pro.append(productsdetails)
    print(self.pro)
}

【讨论】:

  • " self.pro = self.pro.append(productsdetails)" 使用此代码后,也一样
  • 这不是答案
【解决方案2】:

解决这个迭代

var pro = [[String:Any]]()

if let productsdetails = userdata.value(forKey: "products") as? [[String: Any]] {
    for details in productsdetails {
       pro.append(details)
    }

}

如果不想迭代,也可以直接使用self.pro = productsdetails

**image 显示 [String : String],因为我使用了 [String : String] 而不是 [String : Any]*

【讨论】:

    【解决方案3】:

    你可以试试这个:(Swift-4.2)

    var data: [String: Any] = [
        "key1": "example value 1",
        "key2": "example value 2",
        "items": []
    ]
    
    for index in 1...3 {
    
        let item: [String: Any] = [
            "key": "new value"
        ]
    
        // get existing items, or create new array if doesn't exist
        var existingItems = data["items"] as? [[String: Any]] ?? [[String: Any]]()
    
        // append the item
        existingItems.append(item)
    
        // replace back into `data`
        data["items"] = existingItems
    }
    

    答案同:Append to array in [String: Any] dictionary structure

    【讨论】:

      【解决方案4】:

      您能否向我们展示您对主要产品的回复?因为变量 pro 和 productdetails 不匹配。正如我所看到的,专业人士将值保存为“字典数组,键为字符串类型,值为任何类型”,上面再次有数组,productdetails 期望任何类型的数组而不是字典类型的数组。假设您的产品具有字符串类型的数组,甚至可以是类对象类型,您可以按如下方式进行。

      var pro = Array<Any>() //Or You can make Array<String>() or Array<CustomClass>()
      
      var userdata:[String:[String]] = ["products":["One","Two","Three"]]
      
      var productsdetails = Array<Any>()
      productsdetails = userdata["products"] ?? []
      print("response\(productsdetails)")
      pro.append(productsdetails)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-01-16
        • 2019-06-29
        • 2020-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多