//fatalError()
//public func fatalError(_ message: @autoclosure () -> String = default, file: StaticString = #file, line: UInt = #line) -> Never
// 这个语法,唯一要需要解释的是 @noreturn
enum MyEnum {
case Value1, Value2, Value3
}
// 注意这个方法,的 default 分支没有返回,但是也能编译通过
func check(someValue: MyEnum) -> String {
switch someValue {
case .Value1:
return "OK"
case .Value2:
return "Maybe OK"
default:
fatalError("Should not show!")
}
}
// 在我们事假自己编码的时候,经常会有不想让别人调用某个方法,但不不得不将其保罗出来的时候,一个最常用并合理的需求就是 ‘抽象类型或者抽象函数’, 就是父类定义了某个方法,但是子并不给出具体实现,而是要求它的子类去实现这个方法。在 Cocoa 中会用 依赖协议和委托的设计模式来变通的实现。 比如 UIActivity 的子类 必须实现一大堆指定的方法。而正是缺少这个抽象函数的机制,这些方法都必须在文档中写明
// 面对这种情况,为了确保子类实现这个方法,而父类的方法不会错误的调用
class MyClass {
/*
这两个方法必须被重写,不然就会崩溃
*/
func methodMustBeImplementedInSubclass() {
fatalError("这个方法必须在子类中被重写")
}
func methodMustBeImplementedInSubclassReturnString() -> String {
fatalError("这个方法必须在子类中被重写")
}
}
// 对于一些我们不希望别人随意调用,但是又不得不去实现的方法,我们都应该使用 fatalError来避免任何可能的误会。比如父类表明了某个 init 的方法是 required的,但是你的子类永远不会使用这个方法初始化时,就可以采用类似的方法,被方法使用 init(code: NSCoder)就是这个一个例子 在子类中,编译器就会提示我们 加上 这个方法 来避免错误
//
//required init(coder: NSCoder){
// fatalError("NSCoder not supported")
//}