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

Initializing int4 using Swift; bug or expected behaviour?

游乐场代码:

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 中的预期行为吗?

乍一看,这似乎是预期的行为。

当您指定

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 类型并且现在类型对齐。