Swift的Double初始值设定项对移位整数参数的类型推断问题

时间:2019-01-24 15:12:36

标签: swift type-inference

我正在尝试使用整数移位操作的结果来初始化Float或Double。传递的参数是整数文字,移位了无符号字节。据我了解Swift的类型推断,该参数应为Int类型。但是,结果浮点值为0.0。奇怪的是,只要将参数表达式放在方括号中,问题就会消失。

let someByte = UInt8(16)

print(Double(1 << someByte)) //Prints "0.0" ?!
print(Double((1 << someByte))) //Prints "65536.0"

1 个答案:

答案 0 :(得分:2)

这看起来像是编译器中的错误。正如@Hamish所说,最新的大师解决了这个问题,我可以确认已经安装了Swift 4.2和Swift 5.0的工具链:

  • 使用Swift 4.2工具链时,行为如您所描述的:第一个打印输出0.0,第二个打印输出65536.0
  • 如果使用最新的Swift 5.0工具链,则两个调用都将打印65536.0