Arrays Swift:在字典数组中循环

Arrays Swift:在字典数组中循环,arrays,json,swift,dictionary,struct,Arrays,Json,Swift,Dictionary,Struct,我正在努力遍历从web服务调用返回的字典值数组 我已经实现了以下代码,在运行时似乎遇到了崩溃 我还希望将结果存储到自定义结构中。真的很难做到这一点,到目前为止,这里的答案还没有奏效。如果有人能帮忙,我将不胜感激 let nudgesURLString = "http://www.whatthefoot.co.uk/NUDGE/nudges.php" let nudgesURL = NSURL(string: nudgesURLString) let session =

我正在努力遍历从web服务调用返回的字典值数组

我已经实现了以下代码,在运行时似乎遇到了崩溃

我还希望将结果存储到自定义结构中。真的很难做到这一点,到目前为止,这里的答案还没有奏效。如果有人能帮忙,我将不胜感激

    let nudgesURLString = "http://www.whatthefoot.co.uk/NUDGE/nudges.php"
    let nudgesURL = NSURL(string: nudgesURLString)

    let session = NSURLSession.sharedSession()

    let task = session.dataTaskWithURL(nudgesURL!, completionHandler: {data, response, error -> Void in

        if error != nil {
            println(error)
        } else {

           let nudgesJSONResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary

            let nudges: NSDictionary = nudgesJSONResult["nudges"] as NSDictionary

            if let list = nudgesJSONResult["nudges"] as? [[String:String]] {
                for nudgeDict in list {
                    let location = nudgeDict["location"]
                    println(location)
                }
            }

        }

    })

    task.resume()

}
通知

此答案是使用Swift 1.2编写的,因此,根据您当前的Swift系统,可能需要对答案进行一些轻微的文体和语法更改

答案——Swift 1.2

这行代码正在崩溃:

let nudges: NSDictionary = nudgesJSONResult["nudges"] as NSDictionary
你强迫施展斯威夫特无法应付的演员阵容。你永远不会进入你的for循环

尝试更改代码,使其看起来更像:

let nudgesURLString = "http://www.whatthefoot.co.uk/NUDGE/nudges.php"
let nudgesURL = NSURL(string: nudgesURLString)

let session = NSURLSession.sharedSession()

let task = session.dataTaskWithURL(nudgesURL!, completionHandler: {data, response, error -> Void in
    if error != nil {
        println(error)
    } else {
        let nudgesJSONResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as [String : AnyObject]
        if let nudges = nudgesJSONResult["nudges"] as? [[String : String]] {
            for nudge in nudges {
                let location = nudge["location"]
                println("Got location: \(location)")
                println("Got full nudge: \(nudge)")
            }
        }
    }

})

task.resume()
谢谢

我创建了以下存储数据的结构,还允许我在视图控制器中为特定索引创建字典

struct NudgesLibrary {

var location: NSArray?
var message: NSArray?
var priority: NSArray?
var date: NSArray?
var nudges: NSArray?

init(nudgesObject: AnyObject) {

    nudges = (nudgesObject["nudges"] as NSArray)

    if let nudges = nudgesObject["nudges"] as? NSArray {
        location =  (nudges.valueForKey("location") as NSArray)
        message = (nudges.valueForKey("message") as NSArray)
        priority = (nudges.valueForKey("priority") as NSArray)
        date = (nudges.valueForKey("date") as NSArray)

    }
  }
}

它在哪里坠毁?JSON数据看起来像什么?也许它是一个JSON数组而不是一个字典??在这种情况下,
由于NSDictionary
会崩溃(而且这个问题每隔一天就会出现一次,所以…),您可以将
nudgesJSONResult[“nudges”]
分配给字典--
nudges
和可选绑定(如果让…)中的字典数组
list
。这可能是一些问题的开始,但正如Martin R所指出的,问题不清楚是什么问题。寻求调试帮助的问题(“为什么代码不工作?”)必须包括所需的行为,一个特定的问题或错误,以及在问题本身中重现它所需的最短代码。可以在此处找到JSON数据:。当我打印LN(nudgesJSONResult)时,JSON在xcode控制台中输出良好。很难访问API中嵌套的值,谢谢!这起作用了,已经挣扎了几个小时。以前只使用NSDictionary格式的JSON数据,您知道将返回的数据存储在自定义结构中的最佳方法吗?您只需定义结构并将属性分配给每个
轻推
对象的属性,然后将其添加到数组中即可。这有意义吗?努力设置结构以便将值存储在数组中。例如,目前我只能获取存储为单个字符串的位置,而不是包含所有位置值的数组。您只需要一个位置数组吗?如果是这样,您可以执行
let locations=(轻推为NSArray)。valueForKey(“location”)
这将是所有位置字符串的数组。如果让轻推=…,请确保在
内部执行此操作。