我有以下函数,它生成一个快速的NSURLConnection请求并返回页面的内容。该函数在我的返回行'Float' is not convertible to 'Void'
func getDJI(year: Int, month: Int, day: Int) -> Float {
let baseURL = "http://geo.crox.net/djia"
var request = NSMutableURLRequest(URL: NSURL(string: String(format:"%@/%02d/%02d/%02d",baseURL, year, month, day))!)
httpGet(request){
(data, error) -> Void in
if error != nil {
println(error)
} else {
return (data as NSString).floatValue
}
}
}
出了什么问题?
答案 0 :(得分:2)
这里有两个问题。
首先,你有一个关闭,它应该返回Void
并且你正试图从它返回Float
,其次,你已经得到了一个应该返回Float
的函数,但是你永远不会从中返回任何东西。
最有意义的是你的外部函数返回Void
,并且它接受一个期望Float
并返回Void
的闭包:
func getDJI(year: Int, month: Int, day: Int, completion:(Float)->Void) -> Void {
let baseURL = "http://geo.crox.net/djia"
var request = NSMutableURLRequest(URL: NSURL(string: String(format:"%@/%02d/%02d/%02d",baseURL, year, month, day))!)
httpGet(request){
(data, error) -> Void in
if error != nil {
println(error)
} else {
completion((data as NSString).floatValue)
}
}
}
记录...... (data as NSString).floatValue
看起来很可疑......
答案 1 :(得分:1)
你的回归在你的httpGet()
封闭内,它应该不返回任何内容(“Void”)。
这看起来像是在尝试使用异步httpGet()
函数并将其视为同步函数。你不能这样做。我不知道httpGet()
做了什么,但很明显它会立即返回并在下载数据时调用它的闭包。