1

游乐场代码:

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

4

1 回答 1

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

于 2015-06-23T21:10:05.607 回答