Ich baue eine iOS App in Swift 3, die mit einem JSON Rest Api kommunizieren soll, der ich bin Ich baue mich auch selbst. Die App wird alle möglichen Inhalte von der API bekommen, aber im Moment muss ich nur die Verfügbarkeit der API durch eine Handshake-Funktion überprüfen.Unerwarteter nicht voider Rückgabewert in der void-Funktion - JSON Daten von dataTask (mit: 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()
Dies ist die dataTask ist ich eingerichtet haben und es läuft ganz gut (Wenn ich die JsonResult drucken, ich das „Willkommen!“ Bekommen Nachricht wie erwartet. Das Problem ist, dass ich meine Handshake-Funktion zurückkehren wollen true oder false (Damit kann ich eine Warnung ausgeben, wenn der Fall falsch ist.) Wenn ich versuche, in der if-Anweisung eine Rückgabe wahr oder falsch einzurichten, erhalte ich den Fehler: Unerwarteter nicht void-Rückgabewert in der void-Funktion.
Meine Frage ist: Wie kann ich die Daten aus dem dataTask zurückkehren, damit ich Schecks mit ihm in meiner Handshake-Funktion durchführen kann, ich bin sehr neu für Swift so alle Hilfe ist willkommen :)
? 0Im Folgenden finden Sie die ganze Klasse:
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()
}
}
Mögliches Duplikat von [Zurückgeben von Daten aus dem asynchronen Aufruf in der Swift-Funktion] (http://stackoverflow.com/questions/25203556/returning-data-from-async-call-in-swift-function) – vadian
Mögliche Duplikate von [ Wie kann ich die Daten von NSURLSession.sharedSession() .dataTaskWithRequest] (http://stackoverflow.com/questions/31264172/how-can-i-get-the-data-from-nsurlessions-sharedsession-datataskwithrequest) abrufen – Moritz