【问题标题】:Why does type annotation for Int as Double work but not Double as Int?为什么 Int as Double 的类型注释有效但 Double as Int 无效?
【发布时间】:2018-12-20 03:18:14
【问题描述】:

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

  let num: Double = 100
  print(num)

为什么类型注解对双精度整数的作用不同(错误无法将类型“双”的值转换为指定类型“整数”)?

  let num: Int = 100.0
  print(num)

【问题讨论】:

    标签: swift


    【解决方案1】:

    将 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 的函数,而编译器不会抱怨。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-05
      • 1970-01-01
      • 2021-11-18
      • 2014-08-15
      • 2018-12-29
      • 2021-02-25
      相关资源
      最近更新 更多