使用Swift初始化int4;错误或预期的行为?

时间:2015-06-23 21:00:55

标签: swift simd swift2 ios9

游乐场代码:

import simd

let test = int4(1,2,3,4) // this works

let x = 1
let test2 = int4(x,2,3,4) // doesn't work (nor does let x: Int = 1)

let y: Int32 = 1
let test3 = int4(y,2,3,4) // works

很明显int4期望Int32值,但在第一种情况下,它似乎能够在没有明确指定Int类型的情况下解决它,但在第二种情况下(当整数是第一种情况时)存储为单独的变量)它没有。

这是Swift中的预期行为吗?

1 个答案:

答案 0 :(得分:6)

乍一看,这看起来像预期的行为。

指定

let test = int4(1,2,3,4)

整数文字有隐式初始化为Int32类型。当你做一个

let x = 1

默认情况下,x的类型为Int。作为一种安全措施,Swift不对整数和浮点类型进行隐式类型转换。您需要将其显式地转换为Int32才能使其正常工作:

let test2 = int4(Int32(x),2,3,4)

这就是你的第三个例子有效的原因。而不是依赖类型推断来设置y是什么,你给它Int32类型和类型现在对齐。