此问题已在此处有答案:
Returning data from async call in Swift function(13个回答)
10天前关闭。
我不想检查我的url statusCode是否等于200,我创建了一个函数,如果statusCode等于200,则返回布尔值,我使用的是dataTask,但我不知道如何返回值:
class func checkUrl(urlString: String) -> Bool{
let urlPath: String = urlString
var url: NSURL = NSURL(string: urlPath)!
var request: NSURLRequest = NSURLRequest(url: url as URL)
var response: URLResponse?
let session = Foundation.URLSession.shared
var task = session.dataTask(with: request as URLRequest, completionHandler: {(data, response, error) in
if let error = error {
print(error)
}
if let data = data{
print("data =\(data)")
}
if let response = response {
print("url = \(response.url!)")
print("response = \(response)")
let httpResponse = response as! HTTPURLResponse
print("response code = \(httpResponse.statusCode)")
if httpResponse.statusCode == 200{
return true
} else {
return false
}
}
})
task.resume()
}
if else
中的返回返回错误:
void函数中出现意外的非void返回值
5条答案
按热度按时间iswrvxsc1#
为了返回值,你应该使用块。试着像这样声明你的函数:
然后像这样调用它:
希望这会有所帮助。
0kjbasz62#
如果你想保持原始的返回模式,可以考虑
semaphore
。oo7oh9g93#
Swift4,work in my case尝试在
dataTask
中添加guard let data = data else { return }
,如下所示:m3eecexj4#
您从
Void
函数返回的值是dataTask(_:, _:)
的completionHandler
闭包关于你的代码,有一些错误:你不能返回那个值,因为它是在不同的线程上执行的,这是一个异步操作。请看一下这个帖子:Returning data from async call in Swift function
3phpmpom5#
我也在学习Swift,这是我如何做到这一点的。
在Swift中,可以使用URLSessionDataTask来执行网络请求并异步检索数据。要从数据任务返回数据,通常使用完成处理程序。下面是一个如何执行此操作的示例: