Tôi có câu hỏi về xử lý ngoại lệ trong Swift. Tài liệu UIKit cho lớp UIStoryboard tuyên bố rằng instantiateViewControllerWithIdentifier (định danh: String) -> Hàm UIViewController sẽ ném một ngoại lệ nếu mã định danh là nil hoặc không tồn tại trong bảng phân cảnh. Tuy nhiên, nếu tôi sử dụng một/try/catch như sau, tôi nhận được một cảnh báo "Không có cuộc gọi để ném chức năng xảy ra trong biểu thức" thử "."xử lý ngoại lệ với swift
Đó chỉ là cảnh báo nên tôi đã nhận ra rằng đó là vấn đề quan trọng; nhưng khi tôi chạy đoạn mã sau và cố tình sử dụng một mã định danh không hợp lệ thì không có ngoại lệ nào bị bắt và một SIGABRT được tạo ra.
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;
}
Bạn phải làm gì/thử/nắm bắt các chức năng ném ngoại lệ như thế này?
Xin cảm ơn trước.
Bryan
Xem phần này, Xử lý lỗi nhanh chóng: http://iosdevcenters.blogspot.in/2015/12/error-handling-in-swift-20.html –
Cảm ơn bạn đã phản hồi nhanh. Điểm chính của câu hỏi của tôi đã bị mất trong tất cả các chi tiết. Các tài liệu nói rằng một ngoại lệ IS ném, nhưng XCode cảnh báo rằng không có ngoại lệ được ném - tại sao sự khác biệt? – Bryon
Có, bạn nhận được RuntimeException, nhưng đối với chức năng tĩnh nó không phải nó. –