难以从NSURL会话返回字典

时间:2015-09-03 20:48:38

标签: return swift2 nsurlsession

我希望有人能帮我解决一个让我摸不着头脑的问题!当我使用NSData(contentsOfUrl...结构尝试此功能时,一切正常。但是,我正在尝试在Apple Watch应用中使用NSURLSession,并且不断出现错误;

...

    class func fetchData() -> [Complication] {

        var task: NSURLSessionDataTask?

        let myURL = "http://www.myurl.com/sample.json"

        let dataURL = NSURL(string: myURL)

        let conf = NSURLSessionConfiguration.defaultSessionConfiguration()
        conf.requestCachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData

        let session = NSURLSession(configuration: conf)

        task = session.dataTaskWithURL(dataURL!) { (data, res, error) -> Void in
            if let e = error {
                print("dataTaskWithURL fail: \(e.debugDescription)")
                return
            }

            var dataSet = [Complication]()

            do {

                let json = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSArray

                for item in json {
                    let name: String? = item["name"] as? String
                    let percent: Int? = item["percent"] as? Int
                    let timeFromNow: Int? = item["timeFromNow"] as? Int

                    let myData = Complication(
                        name: name!,
                        percent: percent!,
                        timeFromNow: timeFromNow!
                    )
                    dataSet.append(myData)
                }   
            } catch {
                print(error)
            }
        }
        return dataSet
//THIS LINE THROWS THE ERROR
    }

...

尝试返回我的dataSet数组时,收到错误实例成员'dataSet'不能用于'并发'类型。然而,如上所述,如果我使用NSData(contentsOfUrl...代替NSURLSession,这似乎有用,这就是我被卡住的地方!

1 个答案:

答案 0 :(得分:0)

数据任务是一个异步执行的闭包。它的返回语句从闭包返回,而不是从外部函数返回。

由于闭包是异步执行的,因此从它返回数据是没有意义的:返回类型是Void。

您应该以不同方式整理代码,例如使用完成处理程序。

提示:搜索"快速返回关闭"在SO。你会发现许多类似于你的问题和一些很好的答案和建议。