Wie kann ich eine Funktion zum Aufruf RESTful API durch NSURLSESSION, die auf jedem Controller in schnellen iOS, d. H. Singleton-Objekt für überall in der App Dies ist der Code, den ich kam. Aber sobald ich die Methode aufruft, stürzt es ab, bis die jsonresponse leer ist.Wie man globale Funktion für REST APIs durch nsurlsession in swift iOS macht?
func apicall (mainurl : String, method :String,params :String) -> NSDictionary{
var jsonresponse = NSDictionary()
let url:NSURL = NSURL(string: mainurl)!
let session = NSURLSession.sharedSession()
let request = NSMutableURLRequest(URL: url)
request.HTTPMethod = method
// request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData
let paramString = params
request.HTTPBody = paramString.dataUsingEncoding(NSUTF8StringEncoding)
let task = session.dataTaskWithRequest(request) {
(
let data, let response, let error) in
enum JSONError: String, ErrorType {
case NoData = "ERROR: no data"
case ConversionFailed = "ERROR: conversion from JSON failed"
}
do{
guard let _:NSData = data, let _:NSURLResponse = response where error == nil else {
print("error")
throw JSONError.NoData
}
print("data = \(data), response = \(response) , error = \(error)")
guard let json = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? NSDictionary else {
throw JSONError.ConversionFailed
}
jsonresponse = json
}
catch let error as JSONError {
print(error.rawValue)
} catch let error as NSError {
print(error.debugDescription)
}
}
task.resume()
return jsonresponse
}
}
'Wache lassen _: NSData, lassen _: NSURLResponse = Antwort' Ich sehe diesen Unsinn Stück Code regelmäßig. Ich weiß nicht, von welchem "populären" Tutorial oder von welcher Antwort es kommt, aber ich schlage vor, dass Sie das nie wieder verwenden und stattdessen das richtige Auspacken von Werten verwenden. Traue nicht zufälligen Tutorials im Web, die meisten sind einfach mittelmäßig, andere sind einfach falsch. – Moritz
@EricD Ich denke, dieser Code überprüft, ob ich Daten oder eine Antwort von der URL zurückbekommen habe und ob es einen Fehler gibt oder nicht. Bitte geben Sie mir einen schöneren Code, falls verfügbar. TIA –
Besseres Beispiel [hier] (http://stackoverflow.com/a/31808605/2227743). Sehen Sie, wie wir das Ergebnis von 'guard' tatsächlich verwenden *, anstatt es zu ignorieren. – Moritz