在Swift中将字典复制到数组中

时间:2016-05-27 00:00:12

标签: ios arrays swift dictionary

我正在尝试使用[[String:AnyObject]]创建一个字典数组。我已经使用SwiftyJSON将JSON转换为JSON对象,并且能够遍历每个键和值。以下代码不会为每个业务创建单独的业务,而是针对业务中的每个密钥和价值创建单独的业务。目前,JSON具有id,name,latitude和longitude的部分,我希望字典中的每个值都适用于数组中的每个业务。

var businesses = [[String:AnyObject]]()

for business in json["businesses"]!.array! {
    for (key,value) in business {
        let value1 = value.stringValue
        businesses.append([key:value1])
    }
}

如何调整此代码以为每个业务创建单独的业务,而不是为每个键和值创建阵列中的单个业务。

目前:

businesses[:] = ["id" = 1, "name" = "asdf",...,"id" = 2, "name" = "asdf2"] 

而不是我想要的是什么

businesses[0] = ["id" = 1, "name" = "asdf"]
businesses[1] = ["id" = 2, "name" = "asdf2"]

2 个答案:

答案 0 :(得分:0)

基本上,您只需要将每个业务的键值对添加到字典中,然后将该字典添加到阵列中。

这样的事情:

var businesses = [[String: AnyObject]]
        for business in json["businesses"]!.array! {
            var dic = [String: AnyObject]
            for (key,value) in business {
                let value1 = value.stringValue
                dic [key] = value1
            }
            businesses.append(dic)
        }

好吧,由于你没有提供你的JSON数据,我无法100%测试代码,但这是一般的想法。

答案 1 :(得分:0)

在Playground中运行。

//: Playground - noun: a place where people can play
import UIKit

// Simulating JSON
class sim {
    let s: String
    init(_ s:String) {self.s = s}
    var stringValue:String {return s}
}
let simulatingJSONThings = [
    ["id":sim("3"), "name":sim("Alice"), "lat":sim("123.45"), "lng":sim("567.89")],
    ["id":sim("4"), "name":sim("Bob"), "lat":sim("123.45"), "lng":sim("567.89")],
    ["id":sim("5"), "name":sim("Conny"), "lat":sim("123.45"), "lng":sim("567.89")],
]

// #1 Yours
do {
    var businesses = [[String:AnyObject]]()
    for business in simulatingJSONThings {
        for (key,value) in business {
            let value1 = value.stringValue
            businesses.append([key:value1])
        }
    }
    businesses
}

// #2 Answer
do {
    var businesses = [[String:AnyObject]]()
    for business in simulatingJSONThings {
        var b = [String:String]()
        for (key,value) in business {
            let value1 = value.stringValue
            b[key] = value1
        }
        businesses.append(b)
    }
    businesses
}