【问题标题】:Why is Swift inferring double values when using literals?为什么 Swift 在使用文字时会推断双精度值?
【发布时间】:2018-07-19 18:24:39
【问题描述】:

我了解 Swift 对类型非常严格,不会将一种类型隐式转换为另一种类型。

为什么这不会产生错误并且输出是一个双精度数组?

let myDoubles = [Double.Pi, 42]

但是这样呢?

let fortyTwoInt = 42;
let myDoubles = [Double.Pi, one]

为什么它在第一个示例中隐式地将 42 转换为 42.0?如果它没有投射,还会发生什么?

更简单的例子:

let someFloat = 2.0 + 2

let twoInt = 2
let someFloat = 2.0 + twoInt

同样,后一个不起作用。

【问题讨论】:

  • 参考手册(Lexical Structure 部分)说:“文字本身没有类型。相反,文字被解析为具有无限精度和 Swift 的类型推断尝试推断文字的类型。”

标签: swift type-inference


【解决方案1】:

“演员”在这里并不是一个正确的词。它将字符序列“4”和“2”解释为整数文字。 Double 符合 ExpressibleByIntegerLiteral,因此可以从中构造 Double

fortyTwoInt 不是整数文字。这是一个Int。而且 Swift 不会在 IntDouble 之间自动转换。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-24
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多