Я начал преобразовывать один из своих проектов в Swift 2 и столкнулся с этой проблемой. Для начала этого блока ниже вполне допустимы try
/catch
, на самом деле он был сгенерирован инструментом миграции Xcode.
do {
requestData = try NSJSONSerialization.dataWithJSONObject(requestContents, options: [])
} catch var error as NSError {
requestError = error
requestData = nil
}
Если я использую тот же код внутри замыкания, например dataTaskWithRequest
, я получаю сообщение об ошибке. Ошибка заключается в назначении задачи, но ее причина заключается в уловке. Следующее также работает, но я не фиксирую ошибку.
let task = session.dataTaskWithRequest(request, completionHandler: { (data, response, taskError) -> Void in
if taskError != nil {
NSLog("Error making request: " + taskError!.localizedDescription)
}
else {
do {
let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableLeaves) as? NSDictionary
if let parseJSON = json as NSDictionary? {
// do some parsing here
}
}
catch {
NSLog("Error in JSON serialization")
}
}
})
task.resume()
но если я попытаюсь зафиксировать ошибку с помощью:
} catch let e as NSError {
Я получаю эту ошибку:
Неверное преобразование из выбрасывающей функции типа '(_, _, _) throws -> Void' в негенерирующую функцию типа '(NSData?, NSURLResponse?, NSError?) -> Void'
Я обнаружил, что:
} catch _ {
работает, но много хорошего, что делает меня.
Я что-то упустил или мне нужно написать об ошибке?
(Это Xcode 7b5)