Я создаю приложение iOS в Swift 3, которое должно связываться с JSON Rest Api, что я также строя себя. Приложение будет получать все виды контента из Api, но пока все, что мне нужно, это проверить доступность Api через функцию рукопожатия.Неожиданное неволевое возвращаемое значение в функции void - JSON Данные из dataTask (с: URL) - (Swift 3.0)
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 (чтобы я мог дать предупреждение, если случай является ложным.) Когда я пытаюсь настроить return true или false в if-statement, я получаю сообщение об ошибке: Неожиданное не-void возвращаемое значение в функции void.
Мой вопрос: Как вернуть данные из dataTask, так что я могу выполнить проверку с ней в моей функции рукопожатия я очень новый Swift, так что все помощь оценили :)
? 0Ниже весь класс:
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()
}
}
Возможный дубликат [Возврат данных из асинхронного вызова в функции Swift] (http://stackoverflow.com/questions/25203556/returning-data-from-async-call-in-swift-function) – vadian
Возможный дубликат [ Как я могу получить данные из NSURLSession.sharedSession() .dataTaskWithRequest] (http://stackoverflow.com/questions/31264172/how-can-i-get-the-data-from-nsurlsession-sharedsession-datataskwithrequest) – Moritz