Swift 數(shù)組用于存儲(chǔ)相同類型的值的順序列表。Swift 要嚴(yán)格檢查,它不允許錯(cuò)誤地在數(shù)組中存放了錯(cuò)誤的類型。
如果賦值創(chuàng)建數(shù)組到一個(gè)變量,它總是可變的,這意味著可以通過(guò)添加元素來(lái)改變它, 刪除或更改其項(xiàng)目,但如果分配一個(gè)數(shù)組常量到則該數(shù)組,則數(shù)組是不可被改變的, 也就它的大小和內(nèi)容不能被改變。
創(chuàng)建數(shù)組
可以使用下面的初始化程序語(yǔ)法來(lái)創(chuàng)建某種類型的空數(shù)組:
var someArray = [SomeType]()
下面是創(chuàng)建一個(gè)給定的大小,并用初始值的數(shù)組的語(yǔ)法:
var someArray = [SomeType](count: NumbeOfElements, repeatedValue: InitialValue)
下面是一個(gè)例子,以創(chuàng)建具有3個(gè)元素并初始值為零的 int 類型空數(shù)組:
var someInts = [Int](count: 3, repeatedValue: 0)
下面是一個(gè)創(chuàng)建三個(gè)元素的數(shù)組,并指定三個(gè)值的數(shù)組的例子:
var someInts:[Int] = [10, 20, 30]
訪問(wèn)數(shù)組
可以使用下標(biāo)語(yǔ)法從數(shù)組中檢索對(duì)應(yīng)值,傳遞數(shù)組名后方括號(hào)內(nèi)的索引對(duì)應(yīng)的值,如下:
var someVar = someArray[index]
在這里,指數(shù)從0開(kāi)始,這意味著可以使用索引0來(lái)訪問(wèn)第一個(gè)元素,第二元素可以通過(guò)使用索引1進(jìn)行訪問(wèn),其它類似。讓我們來(lái)看看下面創(chuàng)建,初始化和訪問(wèn)數(shù)組的例子:
import Cocoa
var someInts = [Int](count: 3, repeatedValue: 10)
var someVar = someInts[0]
println( "Value of first element is /(someVar)" )
println( "Value of second element is /(someInts[1])" )
println( "Value of third element is /(someInts[2])" )
當(dāng)上述代碼被編譯和執(zhí)行時(shí),它產(chǎn)生了以下結(jié)果:
Value of first element is 10Value of second element is 10Value of third element is 10
修改數(shù)組
可以使用 append() 方法或加法賦值運(yùn)算符(+=)將新的項(xiàng)目添加到數(shù)組的末尾,在這里首先創(chuàng)建一個(gè)空的數(shù)組,然后添加新的元素到數(shù)組中,如下所示:
import Cocoa
var someInts = [Int]()
someInts.append(20)
someInts.append(30)
someInts += [40]
var someVar = someInts[0]
println( "Value of first element is /(someVar)" )
println( "Value of second element is /(someInts[1])" )
println( "Value of third element is /(someInts[2])" )
當(dāng)上述代碼被編譯和執(zhí)行時(shí),它產(chǎn)生了以下結(jié)果:
Value of first element is 20Value of second element is 30Value of third element is 40
可以通過(guò)分配一個(gè)在給定的索引處新的值修改數(shù)組的現(xiàn)有元素,如在下面的例子:
import Cocoa
var someInts = [Int]()
someInts.append(20)
someInts.append(30)
someInts += [40]
// Modify last element
someInts[2] = 50
var someVar = someInts[0]
println( "Value of first element is /(someVar)" )
println( "Value of second element is /(someInts[1])" )
println( "Value of third element is /(someInts[2])" )
當(dāng)上述代碼被編譯和執(zhí)行時(shí),它產(chǎn)生了以下結(jié)果:
Value of first element is 20Value of second element is 30Value of third element is 50
迭代/遍歷數(shù)組
可以使用 for-in 循環(huán)迭代級(jí)數(shù),在下面的例子是數(shù)組的整個(gè)集值,如下圖所示:
import Cocoa
var someStrs = [String]()
someStrs.append("Apple")
someStrs.append("Amazon")
someStrs += ["Google"]
for item in someStrs {
println(item)
}
當(dāng)上述代碼被編譯和執(zhí)行時(shí),它產(chǎn)生了以下結(jié)果:
AppleAmazonGoogle
也可以使用 enumerate() 函數(shù),如下面的例子所示,它返回索引及對(duì)應(yīng)的值:
import Cocoa
var someStrs = [String]()
someStrs.append("Apple")
someStrs.append("Amazon")
someStrs += ["Google"]
for (index, item) in enumerate(someStrs) {
println("Value at index = /(index) is /(item)")
}
當(dāng)上述代碼被編譯和執(zhí)行時(shí),它產(chǎn)生了以下結(jié)果:
Value at index = 0 is AppleValue at index = 1 is AmazonValue at index = 2 is Google
兩個(gè)數(shù)組相加
使用加法運(yùn)算符(+),以添加的相同類型的數(shù)組,這將產(chǎn)生新的數(shù)組是來(lái)自兩個(gè)數(shù)組值相加組合后的數(shù)組,如下:
import Cocoa
var intsA = [Int](count:2, repeatedValue: 2)
var intsB = [Int](count:3, repeatedValue: 1)
var intsC = intsA + intsB
for item in intsC {
println(item)
}
當(dāng)上述代碼被編譯和執(zhí)行時(shí),它產(chǎn)生了以下結(jié)果:
22111
count 屬性
可以使用只讀計(jì)算 (count) 數(shù)組屬性,找出下面顯示出數(shù)組中元素的個(gè)數(shù):
import Cocoa
var intsA = [Int](count:2, repeatedValue: 2)
var intsB = [Int](count:3, repeatedValue: 1)
var intsC = intsA + intsB
println("Total items in intsA = /(intsA.count)")
println("Total items in intsB = /(intsB.count)")
println("Total items in intsC = /(intsC.count)")
當(dāng)上述代碼被編譯和執(zhí)行時(shí),它產(chǎn)生了以下結(jié)果:
Total items in intsA = 2Total items in intsB = 3Total items in intsC = 5
空屬性
使用只讀數(shù)組的空屬性(isEmpty)找出一個(gè)數(shù)組是否為空,如下圖所示:
import Cocoa
var intsA = [Int](count:2, repeatedValue: 2)
var intsB = [Int](count:3, repeatedValue: 1)
var intsC = [Int]()
println("intsA.isEmpty = /(intsA.isEmpty)")
println("intsB.isEmpty = /(intsB.isEmpty)")
println("intsC.isEmpty = /(intsC.isEmpty)")
當(dāng)上述代碼被編譯和執(zhí)行時(shí),它產(chǎn)生了以下結(jié)果:
intsA.isEmpty = falseintsB.isEmpty = falseintsC.isEmpty = true



















