为什么类型注释为Int作为Double工作而不是Double作为Int?

Kwo*_*ppy 3 swift

在Swift中,类型注释用于使整数为double

  let num: Double = 100
  print(num)
Run Code Online (Sandbox Code Playgroud)

为什么类型注释不能对double到整数执行相同的操作(错误不能将'Double'类型的值转换为指定类型'Int')?

  let num: Int = 100.0
  print(num)
Run Code Online (Sandbox Code Playgroud)

Swe*_*per 6

Int文字转换为Double作品仅仅因为Double符合ExpressibleByIntegerLiteral:

标准库整数和浮点类型(如Int和Double)符合ExpressibleByIntegerLiteral协议.您可以通过指定整数文字来初始化任何这些类型的变量或常量.

要使第二个代码起作用,Int必须遵守ExpressibleByFloatLiteral.

extension Int : ExpressibleByFloatLiteral {
    public typealias FloatLiteralType = Double

    public init(floatLiteral value: Int.FloatLiteralType) {
        self.init(value)
    }
}

let a: Int = 100.0 // works
Run Code Online (Sandbox Code Playgroud)

我不特别推荐这样做.这可能会导致您在Int没有编译器抱怨的情况下意外地将double值传递给期望的函数.