【发布时间】:2015-03-05 22:03:01
【问题描述】:
因为 Swift 没有抽象方法,所以我正在创建一个默认实现无条件地引发错误的方法。这会强制任何子类覆盖抽象方法。我的代码如下所示:
class SuperClass {
func shouldBeOverridden() -> ReturnType {
let exception = NSException(
name: "Not implemented!",
reason: "A concrete subclass did not provide its own implementation of shouldBeOverridden()",
userInfo: nil
)
exception.raise()
}
}
问题:因为函数应该返回一个值,而上面的函数没有return语句,编译失败。我需要一些方法让编译器相信这个函数永远不可能完成执行,因为它总是会引发错误。
当所有的错误处理似乎都是库级别的,因此超出了编译器的理解范围时,如何在 Swift 中做到这一点?是否有任何语言级别的功能(希望优雅地)终止程序的执行?
【问题讨论】:
-
虽然您已经通过解决方案自行回答了您的问题,但您正在尝试解决一个糟糕/错误的问题。 Swift 没有内置抽象方法是有原因的。
标签: swift compilation abstract throw control-flow