我正在重构一个 Obj-c 类,其中在 removeObserver:
周围有一个 @try/@catch
block 。
在 swift 中做同样的事情会触发警告,因为 removeObserver
可能会失败(当没有观察者时)但它不会抛出任何错误。
知道如何实现相同的行为吗?
编辑:我的代码:
try {
self.removeObserver(self, forKeyPath: "LineDisplayChanged")
}
最佳答案
您调用的 func removeObserver(_ anObserver: NSObject,forKeyPath keyPath: String)
来自 NSKeyValueObserving
协议(protocol),不会抛出任何异常。
另外,请注意在 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")
不会触发任何错误/警告。
关于 swift 2 : Try/Catch a non-throwing function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32235549/