Как использовать NSURLConnection extensionHandler с swift

Кто-нибудь знает, как обработчики (блоки) работают в Swift? Я пытаюсь запустить этот код, но я не могу найти документацию о правильном синтаксисе для completeHandler.

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

4 ответа

Решение

Как это:

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

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

Вам нужно использовать этот код:

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

Для получения дополнительной информации вы можете обратиться к этому учебному пособию или проверить ответы на вопросы Как разобрать файл JSON в swift?,

Правильный термин, который вы ищете здесь - Закрытие. Замыкания в Swift аналогичны блокам в C и Objective-C. В дополнение к ответу Томаша есть еще одна короткая версия для использования обработчика завершения здесь:

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

Здесь я использовал сокращенные имена аргументов. Я получаю доступ к ответу как 0 $, данные как 1 $ и ошибка как 3 $. Я нахожу этот синтаксис более легким для чтения и записи, если параметры не имеют большого числа, иначе код станет нечитаемым.

Другие вопросы по тегам