Swift数组初始化程序语法类型不匹配

时间:2015-08-08 05:34:30

标签: arrays swift initialization tuples

来自Swift编程指南:

  

您可以使用初始化语法创建某个类型的空数组:

var someInts = [Int]()
println("someInts is of type [Int] with \(someInts.count) items.")
// prints "someInts is of type [Int] with 0 items."
     

请注意,someInts变量的类型从初始化程序的类型推断为[Int]

但是如果您实际将其原样复制到XCode中,并检查someInts的类型,则会得到[(Int)],这是一个单元素Int元组的数组。为什么会出现这种差异?您还可以按如下方式初始化数组:

var someInts: [Int] = []

具有正确的类型。

实际上这些类型似乎行为相同,但我试图弄清楚这里发生了什么。

另外in the reference doc for Array它说:

  

使用此初始值设定项创建数组:

var emptyArray = Array<Int>() 
     

等同于使用便捷语法:

var equivalentEmptyArray = [Int]()

但上面的emptyArray类型为Array<Int>,而equivalentEmptyArray的类型为[(Int)],如上例所示。 Array<Int>只是[Int]的完整形式,所以这不是一个真正的问题,除了后者与文档所说的类型不匹配。

注意:通过选项单击变量或选择变量并查看右侧菜单中的“快速帮助”检查器来查找类型。

1 个答案:

答案 0 :(得分:1)

你是对的,[Int][(Int)]实际上表现完全相同(实际上它们是相同的)。

不幸的是,我不知道发生这种情况的确切原因,但从Xcode 7 beta 5(可能是早期版本)开始,它只显示类型为[Int]