【问题标题】:populating array with dictionary用字典填充数组
【发布时间】:2019-03-06 07:29:28
【问题描述】:

我有一个如下所示的数组,其中包含一个名为“OrderDetails”的数组,我认为这是一个字典而不是数组(我不知道该怎么称呼它。
在另一个 vc 中,我必须创建 OrderDetails,然后将其放在 dataa 中。 在我必须创建 OrderDetails 的另一个 VC 中,我有一个表视图,这意味着表的数据(其中一些)应该设置为数组。有人可以帮我如何制作那个数组吗?

 let dataa = [            "Id":0,
                                 "CustomrId": 111,
                                 "PriceVariableId": item[1].priceVariableIdCore,
                                 "PaymentTypeId":item[1].paymentVariableIdCore,
                                 "RefCo":item[1].refcoCore,
                                 "OrderNo":1122,
                                 "ReciverId":0,
                                 "DlvProvinceId":UserDefaults.standard.string(forKey: constantAddress.stateId),
                                 "DlvCityId": UserDefaults.standard.string(forKey: constantAddress.cityId),
                                 "DlvAddress": UserDefaults.standard.string(forKey: constantAddress.addressLine),
                                 "DlvZip": UserDefaults.standard.string(forKey: constantAddress.postalCode),
                                 "DlvTel": UserDefaults.standard.string(forKey: constantAddress.telephone),
                                 "DlvMobile": UserDefaults.standard.string(forKey: constantAddress.mobile),
                                 "TtIsSingle": TAK,
                                 "TtIsDouble": JOFT,
                                 "TtIsTrailer":TREILI,
                                 "Description":EntTozihat.text,

                                 "OrderDetails":["OrderDetailId":0 ,
                                                 "Qty":0,
                                                 "UnitPrice":600]

                                 ]

"OrderDetails":[("OrderDetailId":0 ,"Qty":0,"UnitPrice":600),(),()]

更新

我正在创建 OrderDetails,如下所示:

    for _ in 0...item.count {

            let dict = ["Id": 0,
                        "Qty":item[indexPath.row].quantityCore ,
                        "UnitPrice":item[indexPath.row].feeCore ,
                        "GoodId":item[indexPath.row].goodIdCore,] as [String : Any]
            listArray.append(dict)

        }
        print("JACK=  \(listArray)")

这里有问题!!! 1)我在“cellForRowAt”中使用这个权限和“dequeueReusableCell”,这意味着尽可能多的 ro 将返回如下数据:

JACK= [[“Id”:0,“GoodId”:0,“UnitPrice”:0.0,“Qty”:0.0],[“Id”:0,“GoodId”:0,“UnitPrice”:0.0 , "数量": 0.0], ["Id": 0, "GoodId": 0, "UnitPrice": 0.0, "Qty": 0.0], ["Id": 0, "GoodId": 0, "UnitPrice" :0.0,“数量”:0.0],[“Id”:0,“GoodId”:0,“UnitPrice”:0.0,“数量”:0.0],[“Id”:0,“GoodId”:0,“ UnitPrice": 0.0, "Qty": 0.0], ["Id": 0, "GoodId": 0, "UnitPrice": 0.0, "Qty": 0.0], ["Id": 0, "GoodId": 0 , "UnitPrice": 0.0, "Qty": 0.0], ["Id": 0, "GoodId": 0, "UnitPrice": 0.0, "Qty": 0.0], ["Id": 0, "GoodId" :0,“单价”:0.0,“数量”:0.0],[“Id”:0,“GoodId”:0,“单价”:0.0,“数量”:0.0],[“Id”:0,“ GoodId”:0,“UnitPrice”:0.0,“Qty”:0.0],[“Id”:0,“GoodId”:0,“UnitPrice”:0.0,“Qty”:0.0],[“Id”:0 , "GoodId": 0, "UnitPrice": 0.0, "Qty": 0.0], ["Id": 0, "GoodId": 0, "UnitPrice": 0.0, "Qty": 0.0], ["Id" :0,“GoodId”:0,“UnitPrice”:0.0,“Qty”:0.0],[“Id”:0,“GoodId”:0,“UnitPrice”:0.0,“Qty”:0.0],[” Id": 0, "GoodId": 0, "UnitPrice": 0.0, "Qty": 0.0], ["Id": 0, "GoodId ": 0, "UnitPrice": 0.0, "Qty": 0.0], ["Id": 0, "GoodId": 0, "UnitPrice": 0.0, "Qty": 0.0], ["Id": 0, “GoodId”:0,“UnitPrice”:0.0,“Qty”:0.0],[“Id”:0,“GoodId”:0,“UnitPrice”:0.0,“Qty”:0.0],[“Id”: 0,“GoodId”:0,“单价”:0.0,“数量”:0.0],[“Id”:0,“GoodId”:0,“单价”:0.0,“数量”:0.0],[“Id ": 0, "GoodId": 0, "单价": 0.0, "数量": 0.0]]

你在上面看到的 print() 打印了 4 次,因为我有 4 行!!!

另一个问题 2) 是我不知道为什么它在每个 "JACK="

中返回那么多数据

首先:我需要知道如何使用“cellForRowAt”之外的代码 第二:为什么我在“JACK”中得到这么多数据

【问题讨论】:

  • 重复:来自字典值的数组:stackoverflow.com/questions/26988167/… 来自字典键的数组:stackoverflow.com/questions/26386093/…
  • dataa 是字典,OrderDetails 也是字典。您可以获取值:dataa["OrderDetails"]?.map({ $0.value })
  • @ShalvaAvanashvili dataa["OrderDetails"]?.map({ $0.value }) 做了什么
  • @ShalvaAvanashvili 更新了问题
  • @Kamil.S 实际上我有一个数组,元素应该是字典

标签: ios arrays swift dictionary nested


【解决方案1】:

这样做:

 let orderDetails = dataa["OrderDetails"]!

如果您不确定该条目是否存在,您可以安全地打开它:

if let orderDetails = dataa["OrderDetails"] {
    //use orderDetails
}

或者,如果您在范围的其余部分需要它:

guard let orderDetails = dataa["OrderDetails"] else {
    fatalError("Couldn't unwrap the order details")
}
//use orderDetails

这样orderDetails 将是[String: Int] 类型的字典。

【讨论】:

  • 您不应使用强制展开,而应使用guard 或使用可选类型
  • 这是故意的,是的
  • 应该被接受为答案。对我来说,订单信息唯一“更好”的方法是将其存储到结构中,但这已经超出了问题的范围。
  • @cr0ss 是的,结构看起来确实是一种更好的数据结构方式。一般来说,使用类型为 [Type1: Any] 的字典是数据建模不佳的标志。
  • 这里你说的是如何将OrderDetails放入dataa中,我的问题是如何创建OrderDetails
猜你喜欢
  • 1970-01-01
  • 2022-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多