难以从 NSURL 会话返回字典

Difficulty Returning A Dictionary From NSURL Session

我希望有人能帮我解决一个让我绞尽脑汁的问题!当我使用 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
    }

...

尝试 return 我的 dataSet 数组时,我收到错误 实例成员 'dataSet' 不能用于类型 'Complication'.但是,如前所述,如果我使用 NSData(contentsOfUrl... 而不是 NSURLSession,这似乎确实有效,这就是我被卡住的地方!

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

由于闭包是异步执行的,因此 return 来自它的数据没有任何意义:return 类型是 Void。

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

提示:在 SO 中搜索 "swift return closure"。您会发现很多与您的问题类似的问题以及一些很好的答案和建议。