我正在用 Swift 3 构建一个 iOS 应用程序,它应该与我自己构建的 JSON Rest Api 进行通信。该应用程序将从 Api 获取各种内容,但现在我需要它做的就是通过握手功能检查 Api 的可用性。
let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
if error != nil {
print(error)
} else {
if let urlContent = data {
do {
let jsonResult = try JSONSerialization.jsonObject(with: urlContent, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSDictionary
if jsonResult["response"] as! String == "Welcome, come in!" {
print("************ RESPONSE IS: ************")
print(jsonResult)
return
} else {
return
}
} catch {
print("************ JSON SERIALIZATION ERROR ************")
}
}
}
}
task.resume()
这是我设置的 dataTask,它运行得很好(当我打印 jsonResult 时,我收到“欢迎!”消息如预期的那样。问题是我希望我的握手函数返回 true 或 false(所以我如果情况为假,则可以发出警报。)当我尝试在 if 语句中设置 return true 或 false 时,我收到错误:Unexpected non-void return value in void function。
我的问题是:如何从 dataTask 中返回数据,以便在握手函数中对其进行检查?我对 Swift 很陌生,所以感谢所有帮助:)
下面是整个班级:
import Foundation
class RestApiManager: NSObject {
var apiAvailability:Bool?
func handshake() -> Bool {
let url = URL(string: "https://api.restaurapp.nl/handshake.php")!
let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
if error != nil {
print(error)
} else {
if let urlContent = data {
do {
let jsonResult = try JSONSerialization.jsonObject(with: urlContent, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSDictionary
if jsonResult["response"] as! String == "Welcome, come in!" {
print("************ RESPONSE IS: ************")
print(jsonResult)
return true
} else {
return false
}
} catch {
print("************ JSON SERIALIZATION ERROR ************")
}
}
}
}
task.resume()
}
}