數(shù)組
1.初始化
// 定義一個(gè)可變數(shù)組
var mutableFibs = [0, 1, 2, 3, 4]
// 定義一個(gè)不可變數(shù)組
let fbs = [0, 1, 2, 3, 4]
注意:var與let 的使用,使用let定義的類實(shí)例對(duì)象,這個(gè)引用永遠(yuǎn)不會(huì)發(fā)生變化,不能在定義之后,付給這個(gè)應(yīng)用以新的值,但是這個(gè)引用所對(duì)應(yīng)的內(nèi)存地址指向的對(duì)象卻是可以改變的。在 Swift 中,相較于 NSArray 和 NSMutableArray 兩種類型,數(shù)組只有?種統(tǒng)?的類型,那就是 Array。使? var 可以將數(shù)組定義為可變,但是區(qū)別于與 NS 的數(shù)組,當(dāng)你使? let 定義第?個(gè)數(shù)組,并將第?個(gè)數(shù)組賦值給它,也可以保證這個(gè)新的數(shù)組是不會(huì)改變的,因?yàn)檫@?沒(méi)有共?的引?。 Swift 標(biāo)準(zhǔn)庫(kù)中的所有集合類型都使?了“寫(xiě)時(shí)復(fù)制” 這?技術(shù),它能夠保證只在必要的時(shí)候?qū)?shù)據(jù)進(jìn)?復(fù)制。
2、常用操作
```
var testArray = [0, 1, 2, 3, 4]
添加數(shù)據(jù)
testArray.append(5) //[0, 1, 2, 3, 4, 5]
刪除數(shù)組
testArray.remove(at: 1) //[0, 2, 3, 4, 5]
修改數(shù)組元素
testArray[1] = 3 // [0, 3, 3, 4, 5]
遍歷數(shù)組
// for:
var squared:[Int] = []
for item in testArray {
let temp = item*item
squared.append(temp)
} // squared [0, 4, 9, 16, 25]
// map:
testArray = testArray.map{fibs in fibs * fibs}; // [0, 4, 9, 16, 25]
```
3、高級(jí)語(yǔ)法
以上文提到的 Array的map為例,我們?cè)贠C當(dāng)中常常會(huì)用到給數(shù)組添加方法 - category;在swift 3.0中,我們?cè)鯓訉?shí)現(xiàn)給數(shù)組添加方法呢?
extension Array {
func map<T>(_ transform: (Element) -> T) -> [T] {
var result: [T] = []
result.reserveCapacity(count)
for x in self {
result.append(transform(x))
}
return result
}
}
Element 是數(shù)組中包含的元素類型的占位符,T 是元素轉(zhuǎn)換之后的類型的占位符。map 函數(shù)本?并不關(guān)? Element 和 T 究竟是什么,它們可以是任意類型。T 的具體類型將由調(diào)?者傳?給map 的 transform ?法的返回值類型來(lái)決定。