难以从 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"。您会发现很多与您的问题类似的问题以及一些很好的答案和建议。
我希望有人能帮我解决一个让我绞尽脑汁的问题!当我使用 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"。您会发现很多与您的问题类似的问题以及一些很好的答案和建议。