【问题标题】:Copying a dictionary into an array in Swift将字典复制到 Swift 中的数组中
【发布时间】:2016-05-27 00:00:11
【问题描述】:

我正在尝试使用 [[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"]

【问题讨论】:

    标签: ios arrays swift dictionary


    【解决方案1】:

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

    类似这样的:

    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% 测试代码,但这是一般的想法。

    【讨论】:

    • 这太完美了!立即解决了我的问题。唯一的编辑是第 3 行: var dic = [String: AnyObject]()
    【解决方案2】:

    在 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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-22
      • 1970-01-01
      • 1970-01-01
      • 2014-08-23
      • 2023-03-29
      • 2015-08-30
      相关资源
      最近更新 更多