fatalError()

//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")

//}

你可能感兴趣的:(fatalError())