本文介绍了void 函数中出现意外的非 void 返回值.如何从函数返回变量?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何从函数返回双精度变量?
How do I return a double variable from a function?
class Api {
func getCoordinates(latitude: Bool) -> Double {
if (latitude) {
let url = URL(string: "https://waterservices.usgs.gov/nwis/iv/?format=json&indent=on&sites=08155200¶meterCd=00065&siteStatus=all")!
URLSession.shared.dataTask(with: url) { data, _, _ in
if let data = data {
let posts = try! JSONDecoder().decode(Post.self, from: data)
let lat = (posts.value?.timeSeries?.first?.sourceInfo?.geoLocation?.geogLocation?.latitude)
return lat
}
}
print(5)
// return 5
} else {
print(3)
return 3
}
}
}
使用此代码返回:
Unexpected non-void return value in void function
我总是可以删除 return lat
但这会破坏目的.
I could always remove return lat
but that would kind of defeat the purpose.
推荐答案
这是一个闭包.Async/await 即将推出,但与此同时,请记住URLSession.shared.dataTask
是一个异步函数.这意味着完成处理程序/闭包将在稍后调用.
It's a closure. Async/await is coming very soon, but in the meantime, remember that URLSession.shared.dataTask
is an async function. That means the completion handler/closure will be called at a later time.
因此,您需要添加另一个完成处理程序,而不是 return
.
So, instead of return
, you'll need to add another completion handler.
class Api {
/// add completion handler
func getCoordinates(latitude: Bool, completion: @escaping ((Double) -> Void)) {
if (latitude) {
let url = URL(string: "https://waterservices.usgs.gov/nwis/iv/?format=json&indent=on&sites=08155200¶meterCd=00065&siteStatus=all")!
URLSession.shared.dataTask(with: url) { data, _, _ in
if let data = data {
let posts = try! JSONDecoder().decode(Post.self, from: data)
let lat = (posts.value?.timeSeries?.first?.sourceInfo?.geoLocation?.geogLocation?.latitude)
completion(lat) /// similar to `return lat`
}
}
print(5)
} else {
print(3)
completion(3) /// similar to `return 3`
}
}
}
您的旧代码可能如下所示:
Your old code probably looked something like this:
let returnedDouble = Api().getCoordinates(latitude: true)
print(returnedDouble)
现在,将其替换为:
Api().getCoordinates(latitude: true) { returnedDouble in
print(returnedDouble)
}
这篇关于void 函数中出现意外的非 void 返回值.如何从函数返回变量?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!