游乐场代码:
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中的预期行为吗?
答案 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类型和类型现在对齐。