使用Swift初始化int4;bug还是预期的行为?

使用Swift初始化int4;bug还是预期的行为?,swift,simd,swift2,ios9,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类型的情况下计算出来,但在第二种情况

游乐场守则:

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类型,然后将类型对齐。

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

当您指定

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类型,现在使类型对齐。

感谢您的洞察力:)我认为,由于Swift能够进行类型推断(从第一个示例开始),我不确定这是否意味着它应该在第二种情况下进行。不管怎样,作为一种安全措施是有意义的。顺便说一句,让我感到困惑的是错误消息说在
让test2=int4(x,2,3,4)
的情况下,int4不能用
(Int,Int,Int,Int)初始化。如果错误信息是无法用
(Int,Int32,Int32,Int32)
初始化它,那么就更容易找出哪里出了问题。看起来斯威夫特可能已经使用了
x
类型来推断我提供的其他参数的类型?@Matthew-可能值得提交一个增强请求,并提供一个小测试用例。我知道他们一直在努力改进类型推断和它报告的错误。根据我的经验,Swift中的错误消息从令人困惑到具有积极误导性。我已经学会了将似乎没有意义的Swift错误消息视为“Duh,sumptin错了……derp?”我所相信的是,所讨论的行有问题,这取决于我来找出问题所在。感谢您的洞察力:)我认为,由于Swift能够进行类型推断(来自第一个示例),我不确定这是否意味着它应该在第二种情况下进行类型推断。不管怎样,作为一种安全措施是有意义的。顺便说一句,让我感到困惑的是错误消息说在
让test2=int4(x,2,3,4)
的情况下,int4不能用
(Int,Int,Int,Int)初始化。如果错误信息是无法用
(Int,Int32,Int32,Int32)
初始化它,那么就更容易找出哪里出了问题。看起来斯威夫特可能已经使用了
x
类型来推断我提供的其他参数的类型?@Matthew-可能值得提交一个增强请求,并提供一个小测试用例。我知道他们一直在努力改进类型推断和它报告的错误。根据我的经验,Swift中的错误消息从令人困惑到具有积极误导性。我已经学会了将似乎没有意义的Swift错误消息视为“Duh,sumptin错了……derp?”我所相信的是,有问题的线路出了问题,这取决于我来找出问题所在。