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

问题描述 投票:1回答:1

来自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]()

但上面的emptyArrayArray<Int>类型,而equivalentEmptyArray有前面例子中的[(Int)]类型。 Array<Int>只是[Int]的完整形式,所以这不是一个真正的问题,除了后者与doc所说的类型不匹配。

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

arrays swift initialization tuples
1个回答
1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.