【问题标题】:Swift 2 : Try/Catch a non-throwing functionSwift 2:尝试/捕获非抛出函数
【发布时间】:2015-08-26 19:54:14
【问题描述】:

我正在重构一个 Obj-c 类,其中 removeObserver: 周围有一个 @try/@catch 块。

在 swift 中执行相同的操作会触发警告,因为 removeObserver 可能会失败(当没有观察者时)但它不会引发任何错误。

知道如何实现相同的行为吗?

编辑:我的代码:

try {  
    self.removeObserver(self, forKeyPath: "LineDisplayChanged")
}

【问题讨论】:

    标签: swift try-catch swift2


    【解决方案1】:

    您调用的func removeObserver(_ anObserver: NSObject,forKeyPath keyPath: String) 来自NSKeyValueObserving 协议,不会引发任何异常。

    另外,请注意,在 Swift 2 中,异常的语法(实际上是 ErrorType 枚举子类)已经改变,现在是这样的:

    do{
       try functionThrowingExceptions()
    
    }catch ErrorTypeSubclassEnum.Value {
       // Do something
    }catch ErrorType {
       // Do something, catches everything else
    }
    

    请参阅this post 了解更多信息。

    注意:我正在使用带有最新测试版 XCode7 的 KVO,执行 self.removeObserver(self, forKeyPath: "path") 不会触发任何错误/警告。

    【讨论】:

      【解决方案2】:

      要删除警告,只需删除 try { }removeObserver:forKeyPath: 抛出异常而不是错误。而且你无法在 Swift 中捕获异常,因此请确保只有在观察到它时才调用此方法,否则它会崩溃并且在 Swift 中无法绕过它。

      您可以在 Objective-C 中编写一个类别来包装此调用并捕获异常并返回错误。

      【讨论】:

      • 警告:No call to throwing functions occur within 'try' expression。不是很重要,但我不喜欢我的代码中的警告:)
      猜你喜欢
      • 2016-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-04
      • 1970-01-01
      • 1970-01-01
      • 2018-01-31
      • 2012-11-11
      相关资源
      最近更新 更多