web-dev-qa-db-ja.com

swiftでNSURLConnection completionHandlerを使用する方法

誰かがハンドラー(ブロック)がどのように素早く動作するか知っていますか?このコードを実行しようとしていますが、completementHandlerの正しい構文のドキュメントが見つかりません。

let url:NSURL = NSURL(string:"some url")
let request:NSURLRequest = NSURLRequest(URL:url)
let queue:NSOperationQueue = NSOperationQueue()

NSURLConnection.sendAsynchronousRequest(request:request, queue:queue, completionHandler handler:((NSURLResponse!, NSData!, NSError!) -> Void)!)
17
loopmasta

このような:

NSURLConnection.sendAsynchronousRequest(request, queue: queue, completionHandler:{ response, data, error in /* Your code */ })

またはより詳細なバリアント。

NSURLConnection.sendAsynchronousRequest(request, queue: queue, completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in
    /* Your code */
})
41
Tomáš Linhart

sendAsynchronousRequestは、Swiftの新しいバージョンでは廃止されています。 dataTaskWithRequestに移動します。幸い、ほとんど同じ方法で使用されています

let request:NSURLRequest = NSURLRequest(URL:NSURL(string:"http://YOUR_DESIRED_URL.com")!)
let config = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession(configuration: config)

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

});

task.resume()
3
ColossalChris

このコードを使用する必要があります:

NSURLConnection.sendAsynchronousRequest(request,queue:queue,completionHandler:{response,data,error in /* code goes here */ })

詳細については、 this チュートリアルを参照するか、または JSONファイルを迅速に解析する方法 への回答を確認してください。

3
Bluewings

ここで探している正しい用語はClosureです。 Swiftのクロージャーは、CおよびObjective-Cのブロックに似ています。Tomášの回答に加えて、完了ハンドラーを使用する別の短いバージョンがあります:

NSURLConnection.sendAsynchronousRequest(request, queue: queue, completionHandler: {$0; $1; $2})

ここではShorthand Argument Namesを使用しています。 response as$ 0data as$ 1および- エラー$ 3として。パラメータの数が多い場合を除いて、この構文は読み書きが簡単です。そうしないと、コードが読みにくくなります。

0
Evol Gate