2015-08-08 84 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]