#swift #xcode #swift3 #nsurlsession
#swift #xcode #swift3 #nsurlsession
Вопрос:
Я только что скачал Xcode8 и теперь ранее функциональный код:
let Task = URLSession.sharedSession.dataTaskWithRequest(Request) {
(data : NSData!, response : URLResponse!, error : NSError!) in
}
выдает ошибку:
Cannot convert value of type '(NSData!, URLResponse!, NSError!) -> ()' to expected argument type '(Data?, URLResponse?, Error?) -> Void'
Что неисправно или изменилось с Xcode 2?
Ответ №1:
В сообщении об ошибке просто говорится, что компилятор хочет
let task = URLSession.sharedSession.dataTaskWithRequest(request) {
(data : Data?, response : URLResponse?, error : Error?) in
}
но вам вообще не нужны аннотации типа, что волшебным образом позволяет избежать ошибки
let task = URLSession.sharedSession.dataTaskWithRequest(request) {
(data, response, error) in
}
Однако в Swift 3 вы должны написать
let task = URLSession.shared.dataTask(with: request) { (data, response, error) in ... }
Ответ №2:
Если вы даете им необязательный (‘?’), а не заставляете их, они, похоже, работают без каких-либо проблем:
let task = URLSession.shared.dataTask(with: Request) {
(data : Data?, response : URLResponse?, error : Error?) in
}