2015-07-10 27 views
6

Tôi đang cố gắng sử dụng Swift 2.0 try-catch.nhanh chóng có thể gặp lỗi nghiêm trọng?

tôi ban đầu đã có đoạn mã sau

override func viewDidLoad() 
{ 
    var obj : Object?; 
    Hi(obj); 
} 

Nhưng nó procdues lỗi

func Hi(open : Open?) -> Open? 
{ 
    open!.Hi(); <-- here is error point. Fatal error ! 
    print("OK"); 

    return open; 
} 

Vì vậy tôi đã thay đổi mã trong viewDidLoad() để:

override func viewDidLoad() 
{ 
    try 
    { 
     var obj : Object?; 
     Hi(obj); 
    } 
    catch 
    { 
     print("bug !!!"); <- I want to this !!! 
    } 
} 

Nhưng nó không làm việc !!!

Tôi đoán tính năng thử tìm kiếm nhanh khác với C, C#.

Làm cách nào để nhận được lỗi nghiêm trọng?

Có thể sau đây là một cách nhanh chóng thích hợp?

func Hi(open : Open?) -> Open? 
{ 
    if let op = open 
    { 
     op.Hi(); 
     print("OK"); 

     return open; 
    } 
    else 
    { 
     return nil; 
    } 
} 
+2

Chỉ cần đọc tất cả những điều sau: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ErrorHandling.html –

Trả lời

0

Khi bạn đang gọi điện thoại Hi() như thế này: open!.Hi();, chương trình của bạn có thể sụp đổ nếu open là con số không.

open là thông số và giá trị được chuyển khi thông số đó được xác định trên trang web cuộc gọi như vậy: var obj : Object?;. Bạn đang xác định một biến mới có tên là obj với loại Object?, nhưng bạn không gán cho nó một giá trị. Điều này có nghĩa là obj sẽ là 0 và do đó open sẽ là 0 và điều này dẫn đến lỗi open!.Hi().

Để giải quyết, hãy đảm bảo gán giá trị cho thông số Hi. Nó có thể là tốt hơn để làm cho tham số không tùy chọn là tốt, vì vậy bạn không cần phải buộc unwrap nó để gọi một chức năng trên nó.

9

Bạn không được phép bắt fatalerror. Nó chỉ ra một lỗi lập trình. Bạn không bắt lỗi lập trình, bạn sửa mã của mình. Vụ tai nạn là cố ý và nó là cố ý mà bạn không thể ngăn chặn nó.

Một cái gì đó liên quan đến các từ khóa thử, bắt và ném có sẵn trong Swift 2, nhưng đó là không có gì giống như ngoại lệ C++ mà bạn dường như đang suy nghĩ về.

+1

Thật là xấu hổ! Cảm ơn câu trả lời của bạn ^^ a – AquaMinDlRae

+0

"Không có gì giống như ngoại lệ C++"? Tôi cho đó là ngoại lệ. Nó khá giống ý tưởng, đúng không? –

+4

"Bạn không bắt gặp lỗi lập trình, bạn sửa mã của mình". là khủng khiếp, các ứng dụng trong tự nhiên với 1000 người dùng có rất nhiều hoán vị mã và dữ liệu mà bạn không thể dự đoán trước và thử nghiệm tất cả trước. Hiện tại, chúng tôi phải sử dụng Objective-C để bạn có thể bắt ngoại lệ, đăng nhập và để ứng dụng thất bại một cách duyên dáng thay vì chỉ bị lỗi như ứng dụng Swift. –

Các vấn đề liên quan