2016-11-05 48 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

相关问题