Swift 4如何在一个数组中存储多个数据?

时间:2018-08-21 07:28:27

标签: arrays swift

我从API获取JSON。因此,我想用键SKU存储一个特定的值。所以,我所做的是:

    var skuArr = [""]
{ (response, error) in

            if (error != nil)
            {
                print("Error \(error.debugDescription)")
            }

            else
            {
                self.coinsArr = response.arrayObject as? Array<Dictionary<String, Any>>

                for i in 0 ..<  (self.coinsArr?.count)!
                {
                    self.skuArr = [response[i]["sku"].rawValue as! String]
                }
}

因此,有了这个,我得到了skuArr中的数组,但是当我为0时我得到了[“ a”],而当我为1时我希望它成为了[“ a”,“ b”],但是它仅给出[“ b”],并且当循环仅以最后一个值而不是我希望作为最终结果的[“ a”,“ b”,“ c”,“ d”]结束时。如何将它们每个插入到数组中?

2 个答案:

答案 0 :(得分:1)

首先将skuArr声明为字符串数组。

var skuArr = [String]()

这是Swift。有比基于丑陋索引的循环更好的方法,例如使用mapcompactMap

if let result = response.arrayObject as? Array<Dictionary<String, Any>> {
    self.coinsArr = result
    self.skuArr = result.compactMap{ $0["sku"] as? String }
}

又为什么coinsArr声明为可选,因为无论如何都要强制将其拆开?强烈建议尽可能使用非可选类型。 非可选选项永远不会导致相似的意外发现nil 崩溃

答案 1 :(得分:0)

请勿使用:

@JsonDeserialize(`as` = MultiError::class)

因为它将用新值替换以前的值。

使用self.skuArr = [response[i]["sku"].rawValue as! String] 插入数组。

.append

编辑

如下更改您的初始化:

self.skuArr.append([response[i]["sku"].rawValue as! String])