2015-08-08 80 views
1

从斯威夫特编程指南:斯威夫特数组初始化语法类型不匹配

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> wh ile equivalentEmptyArray的类型为[(Int)],如前例所示。 Array<Int>只是[Int]的完整形式,所以这不是一个真正的问题,除了后者与文档所说的类型不匹配。

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

回答

1

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

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