2014-10-07 3 views
0

Я пытаюсь сделать мой собственный метод с обработчиком завершения в Swift:Завершение обработчика ошибок в Swift

func callURL(url: NSURL, username: String, password: String, completionHandler: (NSData?) ->()?) { 
    let request = NSMutableURLRequest(URL: url) 
    let un = username 
    let pass = password 
    let loginString = NSString(format: "%@:%@", un, pass) 
    let loginData: NSData = loginString.dataUsingEncoding(NSUTF8StringEncoding)! 
    let base64LoginString = loginData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(0)) 
    request.setValue("Basic \(base64LoginString)", forHTTPHeaderField: "Authorization") 
    completionHandler(NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) {(response, data, error) in 
     return data 
    }) 
} 

Но я получаю ошибку на обработчик завершения строки:

'Void' is not convertible to 'NSData' 

ответ

3

Вы возвращаете NSData в функции, возвращающей Void (обратный вызов NSURLConnection).

Вы должны вызвать completionHandler в обратный вызов NSURLConnection как это:

func callURL(url: NSURL, username: String, password: String, completionHandler: ((NSData?) -> Void)?) { 
    let request = NSMutableURLRequest(URL: url) 
    let un = username 
    let pass = password 
    let loginString = NSString(format: "%@:%@", un, pass) 
    let loginData: NSData = loginString.dataUsingEncoding(NSUTF8StringEncoding)! 
    let base64LoginString = loginData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(0)) 
    request.setValue("Basic \(base64LoginString)", forHTTPHeaderField: "Authorization") 
    NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) { 
     response, data, error in 
     if let completion = completionHandler { 
      completion(data) 
     } 
    } 
+0

я не удается преобразовать тип Выражение в «(NSMutableURLRequest, очереди: NSOperationQueue, (($ T5, ($ T5, $ T6, ($ T5, $ T6, $ T7) -> ($ T5, $ T6, $ T7) -> $ T4) -> ($ T5, $ T6, ($ T5, $ T6, $ T7) -> $ T4) -> $ T4, ($ T5, ($ T5, $ T6, $ T7) ... –

+0

Я обновил код, потому что, если вы хотите, чтобы ваш обработчик завершения был необязательным, вы должны объявить, как и я. – Francescu

Смежные вопросы