swift2 Swift中的底部类型

eblbsuwk  于 2022-11-23  发布在  Swift
关注(0)|答案(2)|浏览(346)

我想知道Swift语言中是否有bottom type
为了避免混淆,unit type与swift中的Void()是不同的类型,Any也是top type
令人惊讶的是,我发现最接近的是fatalError()形式的@noreturn属性,因为我们可以 * 大多数 * 传递此函数以符合 * 大多数 * 给定的任意类型。
但是,当然,这是不完整的,因此对于真正的底层类型来说是一个糟糕的替代,例如Scala中的Nothing、Haskell中的undefined,甚至Java中的null
那么,Swift语言中是否存在底部类型?

2lpgd968

2lpgd9681#

事实证明swift中没有Bottom Type,但是我们可以通过@noreturn属性和泛型来模拟它的一般行为,如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!")
6ie5vjzr

6ie5vjzr2#

请参阅Never
基本上,你可以

func foo() -> Never {
    // you can't return
}

相关问题