我希望有人能帮我解决一个让我摸不着头脑的问题!当我使用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
,这似乎有用,这就是我被卡住的地方!
答案 0 :(得分:0)
数据任务是一个异步执行的闭包。它的返回语句从闭包返回,而不是从外部函数返回。
由于闭包是异步执行的,因此从它返回数据是没有意义的:返回类型是Void。
您应该以不同方式整理代码,例如使用完成处理程序。
提示:搜索"快速返回关闭"在SO。你会发现许多类似于你的问题和一些很好的答案和建议。