Swift中的底部类型

Dan*_*hin 8 bottom-type swift swift2

我想知道Swift语言中是否存在底部类型.

为了预先消除任何混淆,单位类型与底部类型不同,正如我们所说的那样Void()在swift中.也Any就是顶级型.

什么我发现是最接近,令人惊讶的,是@noreturn在形式属性fatalError()中,我们可以主要通过这个功能,以符合任意给定类型.

但是,当然,这是不完整的,因此是真正的底部类型的不良替代品,例如,Nothing在Scala,undefinedHaskell甚至nullJava中.

那么,Swift语言中是否存在底层类型?

Dan*_*hin 6

事实证明,swift 中没有底部类型,但我们可以通过@noreturn属性和泛型的一些技巧来模拟它的一般行为,如本次演讲中所述。

func undefined<A>(_ message: String = "") -> A {
  fatalError("Not Implemented: \(message)")
}
Run Code Online (Sandbox Code Playgroud)

然后我们可以使用它来标记代码中尚未实现的部分以传递编译器错误:

func someComplexFunction<U: User>(u: U) -> U {
  return undefined("Do this after creating user")
}
Run Code Online (Sandbox Code Playgroud)

或者证明我们的代码中的一些不变性:

let array = ["hello", "world"]
let hello: String = array.first ?? undefined("This is impossible!")
Run Code Online (Sandbox Code Playgroud)