为什么为Int作为Double键入注释而不起作用为Double作为Int?

时间:2018-12-20 03:18:15

标签: swift

在Swift中,类型注释可以使整数变成双精度

  let num: Double = 100
  print(num)

为什么对于双精度整数到整数类型的注释不一样(错误,无法将类型为“ Double”的值转换为指定的类型“ Int”)?

  let num: Int = 100.0
  print(num)

1 个答案:

答案 0 :(得分: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

我不特别推荐这样做。这可能会导致您不小心将双精度值传递给期望Int的函数,而编译器没有抱怨。