У меня вопрос об обработке исключений в Swift. Документация UIKit для класса UIStoryboard заявляет, что функция instantiateViewControllerWithIdentifier (идентификатор: String) -> UIViewController генерирует исключение, если идентификатор равен нулю или не существует в раскадровке. Однако, если я использую do/try/catch, как показано ниже, я получаю предупреждение «Нет вызовов для металирования функций в выражении« try ».»обработка исключений с быстрым
Это только предупреждение, поэтому я подумал, что это проблема с intellisense; но когда я запускаю следующий код и намеренно использую недопустимый идентификатор, исключение не попадает и генерируется SIGABRT.
let storyboard = UIStoryboard.init(name: "Main", bundle: nil)
do {
let controller = try storyboard.instantiateViewControllerWithIdentifier("SearchPopup")
// This code is only included for completeness...
controller.modalPresentationStyle = .Popover
if let secPopoverPresentationController = controller.popoverPresentationController {
secPopoverPresentationController.sourceView = self.view
secPopoverPresentationController.permittedArrowDirections = .Any
secPopoverPresentationController.barButtonItem = self.bSearchButton
}
self.presentViewController(controller, animated: true, completion: nil)
// End code included for completeness.
}
catch {
NSLog("Exception thrown instantiating view controller.");
return;
}
Как вы должны делать/пытаться/улавливать функции, которые генерируют исключения, подобные этому?
Заранее спасибо.
Bryan
См. Этот раздел, Обработка ошибок в быстром режиме: http://iosdevcenters.blogspot.in/2015/12/error-handling-in-swift-20.html –
Спасибо за быстрый ответ. Основная мысль моего вопроса была потеряна во всех деталях. В документации указано исключение IS, но XCode предупреждает, что исключение NO исключено - почему разница? – Bryon
Да, вы получаете RuntimeException, но для статической функции его нет. –