SwiftyJSON 问题 Swift 2

Posted

技术标签:

【中文标题】SwiftyJSON 问题 Swift 2【英文标题】:SwiftyJSON Problems Swift 2 【发布时间】:2015-10-06 20:52:24 【问题描述】:

我有一个返回 JSON 数据的 API URL,你可以在这里找到它https://itunes.apple.com/us/rss/topmovies/limit=25/json

我想返回这个 JSON 数据中的所有电影片名。

我正在使用 SwiftyJSON 框架来解析来自 URL 的 JSON 数据。我正在使用 NSURLSession.dataTask 从 URL 开始解析。

问题是我要返回的 JSON 数据没有返回任何东西。

这是一些代码 -

JSON 数据 URL -

let url = "https://itunes.apple.com/us/rss/topmovies/limit=25/json"

检索 JSON 数据

 func getTheJSONData() throws 



    let theURL = NSURL(string: url)

    let request = NSURLRequest(URL: theURL!)


    //let JSONError : NSError?



    let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration())

    let task = session.dataTaskWithRequest(request)  (data, response, error) -> Void in


        do 

            if error == nil

            let swiftyJSON = JSON(data: data!, options: NSJSONReadingOptions.MutableContainers, error: nil)

                let Name = swiftyJSON["feed"]["entry"][0]["im:name"]["label"].stringValue


                //prints nil..
                print(Name)


            


         catch 
            // report error

            print(error)
        


    task.resume()



【问题讨论】:

我试过你的代码和it worked (Xcode 7.0.1) @EricD。它是否打印了电影标题列表? 看我链接的截图。当然不是,因为您的代码要求一个标题。所以它打印标题。正如您在代码中所说的那样,它不会打印nil @EricD。有没有办法检索多个电影名称? 当然可以。 :) 我为你做了回答。 【参考方案1】:

您的代码完全符合它的预期:打印电影的标题。

有了这个:

let Name = swiftyJSON["feed"]["entry"][0]["im:name"]["label"].stringValue
print(Name)

你得到了一部电影的标题,因为你得到了数组的第一个元素[0]

由于您想获取所有电影标题,而不是使用第一个元素,而是使用所有元素。示例:

let swiftyJSON = JSON(data: data!, options: NSJSONReadingOptions.MutableContainers, error: nil)

let movies = swiftyJSON["feed"]["entry"].arrayValue

let titles = movies.map  $0["im:name"]["label"].stringValue 

print(titles)

print(titles) 给出一个标题数组:

[“侏罗纪世界”、“复仇者联盟:奥创纪元”、“间谍”、“随行人员”、“像素”、“Froning”、“Pitch Perfect 2”、“Cartel Land”、“Aladdin”、“Furious 7(加长版)”、“Magic Mike XXL”、“\'71”、“Adaline 时代”、“Cast Away”、“Cinderella (2015)”、“San Andreas”、“Mad Max: Fury Road” , “特兰西瓦尼亚酒店”, “帕丁顿”, “不可能的任务 - 幽灵协议”, “阿罗哈”, “涂料”, “电线上的男人”, “我和厄尔与垂死的女孩”, “一夜之间”]

顺便说一句,正如编译器在警告中所说,没有必要将do catch 用于JSON(),因为它不会抛出。

【讨论】:

以上是关于SwiftyJSON 问题 Swift 2的主要内容,如果未能解决你的问题,请参考以下文章

Swift 2 + SwiftyJSON:使用未解决的标识符错误

SwiftyJSON 循环与 swift 1.2

“当前 SwiftyJSON(通过 Swift 3.0.2)无法使用 Swift 3.1 导入”的原因是啥

Swift 2 SwiftyJSON API 数据到 UITableView

Alamofire 的 Swift 扩展方法返回 SwiftyJSON 结果

将 SwiftyJSON 用于 Swift 3.1 的子数组