Я начал конвертировать один из моих проектов в Swift 2, и я столкнулся с этой проблемой. Для запуска этого блока, приведенного ниже, вполне справедливо try
/catch
, на самом деле оно было создано средством миграции Xcode.Swift 2 try/catch
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 {
Я получаю эту ошибку:
Invalid conversion from throwing function of type '(_, _, _) throws -> Void' to non-throwing function type '(NSData?, NSURLResponse?, NSError?) -> Void'
Я обнаружить, что:
} catch _ {
работает, но много хорошего, что делает меня.
Я что-то упускаю или должен ли я регистрировать ошибку?
(Это Xcode 7b5)
идеально. Я бы не подумал об этом, если бы я не выбрасывал пользовательский ErrorType. Благодаря !! – rjb101