2016-11-05 55 views
-1

我試圖讓我在周圍迅速例如使用錯誤的頭我有這樣的代碼:如果字是壞Error,throws和catch的用法是什麼?

import UIKit 

class ViewController: UIViewController { 

    enum SomeError: Error 
    { 
     case badWord 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

     do { 
      try checkWord() 
     } 
     catch SomeError.badWord { 
      print("error!") 
     } 
     catch { //This is like a defualt statement 
      print("Something weird happened") 
     } 

    } 

    func checkWord() throws { 
     let word = "crap" 
     guard word != "crap" else { 
      throw SomeError.badWord 
     } 
     print("Continuing the function") 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


} 

checkWord功能將終止。然而,同樣的行爲可以通過以下方式實現:

func checkWord() { 
    let word = "crap" 
    guard word != "crap" else { 
    print("error!") 
    return 

    } 
    print("Continuing the function") 
} 

那麼定義錯誤和通過catch語句的用法是什麼?

+1

好處是您調用該功能的網站。 'JSONSerialization'庫就是一個很好的例子。如果您傳遞的數據不是有效的JSON,則會引發錯誤。在Objective-C中,你會傳遞一個錯誤指針給方法,然後檢查它是否有錯誤。在Swift中,該方法要麼返回正確的結果,要麼在失敗時引發錯誤。 – daltonclaybrook

+0

你也假設'checkWord'可能會因爲一個原因失敗。通常,您可能有多種原因可能會引發錯誤,正如Martin所說,調用例程可能想根據錯誤類型採取不同的操作。請參閱[Swift編程語言:錯誤處理](https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/ErrorHandling.html#//apple_ref/doc/uid/TP40014097-CH42 -ID508)爲更豐富的例子。 – Rob

回答

2

第二次執行checkWord時,checkWord的調用者無法知道檢查結果。

拋出錯誤然後捕獲錯誤的整個想法是您可以清楚地定義處理錯誤的責任。

例如,您的checkWord函數的工作是檢查不良詞彙。但是不應該對發現壞詞時應該做什麼做出任何假設。可以從許多不同的地方調用checkWord,即使是通過不同的應用程序(例如,如果您在框架中使其可用)。所以你的checkWord函數應該進行檢查並在適當的時候拋出一個錯誤。讓checkWord的調用者決定如何最好地處理錯誤。它可能決定向用戶顯示一條消息。它可能會決定簡單地記錄它並繼續前進。關鍵是,checkWord應該不在乎。讓來電者決定什麼是最好的。

+0

感謝您的詳細解答!它允許代碼中的其他函數定義錯誤的處理方式,並不僅限於其方法中的實現。我想這對編寫框架也很有用,用戶不能編輯源代碼,但是你仍然想給他們選擇處理錯誤的方法。 – KexAri

相關問題