2016-04-17 9 views
0

私はSwiftを学ぶためにthis tutorialをフォローしています。私は彼らのやり方についていくつかの質問をしています。具体的にここにSwift 2でNSURLSession(リクエストデータ)に関するいくつかの質問

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) 
} 

なぜ(data, response, error) inは常にNSURLSessionsに使用されていますか?このコード行は何を意味しますか?また、なぜ彼は下にガードステートメントを持っていますか?

コードのセクション全体はここにある:

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() 
} 

答えて

1

NSURLSessionで、あなたは/作るネットワーク要求を開始し、あなたのプログラムが実行を継続することを意味し、非同期呼び出しを行う - それは、応答を待って停止しません。その後、応答が準備完了になると、完了ブロックが呼び出され/実行されます。したがって、この応答であなたに来るデータにアクセスする方法が必要です。このデータは、(data, response, error)プロパティでアクセス可能です。これはそれらのプロパティの名前だけなので、それらのプロパティの使い方を知ることができます。名前は違うかもしれませんが、他の人には混乱します。

guardステートメントは、実際にデータまたは応答があることを確認できないため使用します。エラーが発生した場合(タイムアウト、...)にはnilになる可能性があります。そのような場合(エラーがある場合)、コンソールに "Error"と表示され、let dataString = NSString(data: data!, encoding: NSUTF8StringEncoding)print(dataString)という行を実行せずに完了ブロックを終了させるreturnを呼び出します。もちろん、データと応答があり、error == nilの場合はguard文のelseブロックをスキップし、ブロック内の最後の2行のコードを実行するだけです。

関連する問題