如何从Swift中的NSDictionary获取单独的String数组中的所有键和值?

时间:2016-08-07 07:27:20

标签: ios arrays json swift

    let urlAsString = "https://drive.google.com/uc?export=download&id=0B2bvUUCDODywWTV2Q2IwVjFaLW8"
    let url = NSURL(string: urlAsString)!
    let urlSession = NSURLSession.sharedSession()

    let jsonQuery = urlSession.dataTaskWithURL(url, completionHandler: { data, response, error -> Void in
        do {
            if let jsonDate = data, let jsonResult = try NSJSONSerialization.JSONObjectWithData(jsonDate, options: []) as? NSDictionary {

                print(jsonResult)

            }
        } catch let error as NSError {
            print(error)
        }


    })
    jsonQuery.resume()

好的,我在这里接收来自在线json的数据,然后将其存储为jsonresult中的NSDictionary。我需要将所有键和值分成两个独立的数组?

基本上我想要这个

jsonresult.allkeys - >字符串数组
jsonresult.allvalues - >字符串数组

3 个答案:

答案 0 :(得分:22)

您可以使用:

let keys = jsonResult.flatMap(){ $0.0 as? String }  
let values = jsonResult.flatMap(){ $0.1 }  

答案 1 :(得分:4)

这很简单,因为你使用jsonResult作为NSDictionary

let dict: NSDictionary = ["Key1" : "Value1", "Key2" : "Value2"]

let keys = dict.allKeys
let values = dict.allValues

在你的情况下

let keys:[String] = dict.allKeys as! [String]

var values:[String]

if let valuesSting = dict.allValues as? [String] {
    values = valuesSting
}

答案 2 :(得分:0)

对于尝试使用较新版本Swift的用户,请使用compactMap()代替flatMap()

let keys = jsonResult.compactMap(){ $0.0 as? String }  
let values = jsonResult.compactMap(){ $0.1 }