2016-04-17 11 views
0

Ich habe this tutorial verfolgt, Swift zu lernen und ich habe ein paar Fragen über die Art, wie sie Dinge tun.Ein paar Fragen zu NSURLSession (Daten anfordern) in Swift 2

Speziell hier:

let paramString = "data=Hello" 
request.HTTPBody = paramString.dataUsingEncoding(NSUTF8StringEncoding) 

let task = session.dataTaskWithRequest(request) { 
    (data, response, error) in 

    guard let _:NSData = data, let _:NSURLResponse = response where error == nil else { 
     print("Error") 
     return 
    } 
    let dataString = NSString(data: data!, encoding: NSUTF8StringEncoding) 
    print(dataString) 
} 

Warum ist (data, response, error) in immer in NSURLSessions verwendet? Was bedeutet diese Codezeile? Auch warum hat er eine Wächteraussage darunter?

Der ganze Abschnitt von Code ist hier:

func dataRequest() { 
    let urlToRequest: String = " http://www.kaleidosblog.com/tutorial/nsurlsession_tutorial.php" 
    let url: NSURL = NSURL(string: urlToRequest)! 

    let session = NSURLSession.sharedSession() 
    let request = NSMutableURLRequest(URL: url) 

    request.HTTPMethod = "POST" 
    request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData 

    let paramString = "data=Hello" 
    request.HTTPBody = paramString.dataUsingEncoding(NSUTF8StringEncoding) 

    let task = session.dataTaskWithRequest(request) { 
     (data, response, error) in 

     guard let _:NSData = data, let _:NSURLResponse = response where error == nil else { 
      print("Error") 
      return 
     } 
     let dataString = NSString(data: data!, encoding: NSUTF8StringEncoding) 
     print(dataString) 
    } 
    task.resume() 
} 

Antwort

1

Mit NSURLSession Sie asynchrone Anrufe tätigen, was bedeutet, dass Sie/machen eine Netzwerkanforderung und das Programm läuft weiter starten - es hört nicht auf Antwort wartet. Wenn Ihre Antwort fertig ist, wird ein Completion-Block aufgerufen/ausgeführt. Sie brauchen also einen Weg, um auf die Daten zuzugreifen, die mit dieser Antwort kommen. Diese Daten sind für Sie mit den Eigenschaften (data, response, error) zugänglich. Dies sind nur die Namen dieser Eigenschaften, sodass Sie wissen, wie Sie sie verwenden. Du könntest verschiedene Namen haben, aber es würde für jeden anderen verwirrend sein.

Sie verwenden die guard-Anweisung, weil Sie nicht sicher sein können, dass Sie tatsächlich die Daten oder die Antwort haben. Es könnte Null sein, wenn ein Fehler aufgetreten ist (Timeout, ...). In diesem Fall (wenn ein Fehler auftritt) drucken Sie einfach "Error" auf die Konsole und rufen return auf, wodurch Sie den Completion-Block verlassen, ohne die Zeilen let dataString = NSString(data: data!, encoding: NSUTF8StringEncoding) und print(dataString) auszuführen. Natürlich, wenn Sie die Daten und die Antwort haben und error == nil überspringen Sie den Else-Block der -Anweisung, und Sie führen Sie einfach die letzten zwei Zeilen des Codes in den Block.

Verwandte Themen