Swift中的底部类型

前端之家收集整理的这篇文章主要介绍了Swift中的底部类型前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想知道 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!")
原文链接:https://www.f2er.com/swift/319395.html

猜你在找的Swift相关文章