我想知道
Swift语言中是否有
bottom type.
为了预先消除任何混淆,unit type与底部类型不同,因为我们将它作为Void或()在swift中.也是顶级类型.
令我惊讶的是,我发现最接近的是fatalError()形式的@noreturn属性,因为我们大多可以通过这个函数来符合大多数给定的任意类型.
但是,当然,这是不完整的,因此是真正的底部类型的不良替代品,例如,Scala中的Nothing,Haskell中的未定义或Java中的null.
那么,Swift语言中是否存在底层类型?
事实证明,swift中没有Bottom Type,但我们可以通过使用@noreturn属性和泛型的几个hack来模拟其一般行为,如
this talk中所述.
func undefined<A>(_ message: String = "") -> A { fatalError("Not Implemented: \(message)") }
然后我们可以用它来标记我们代码中尚未实现的部分以传递编译器错误:
func someComplexFunction<U: User>(u: U) -> U { return undefined("Do this after creating user") }
或者在我们的代码中证明一些不变性:
let array = ["hello","world"] let hello: String = array.first ?? undefined("This is impossible!")