数组
1.初始化
// 定义一个可变数组
var mutableFibs = [0, 1, 2, 3, 4]
// 定义一个不可变数组
let fbs = [0, 1, 2, 3, 4]
注意:var与let 的使用,使用let定义的类实例对象,这个引用永远不会发生变化,不能在定义之后,付给这个应用以新的值,但是这个引用所对应的内存地址指向的对象却是可以改变的。在 Swift 中,相较于 NSArray 和 NSMutableArray 两种类型,数组只有⼀种统⼀的类型,那就是 Array。使⽤ var 可以将数组定义为可变,但是区别于与 NS 的数组,当你使⽤ let 定义第⼆个数组,并将第⼀个数组赋值给它,也可以保证这个新的数组是不会改变的,因为这⾥没有共⽤的引⽤。 Swift 标准库中的所有集合类型都使⽤了“写时复制” 这⼀技术,它能够保证只在必要的时候对数据进⾏复制。
2、常用操作
```
var testArray = [0, 1, 2, 3, 4]
添加数据
testArray.append(5) //[0, 1, 2, 3, 4, 5]
删除数组
testArray.remove(at: 1) //[0, 2, 3, 4, 5]
修改数组元素
testArray[1] = 3 // [0, 3, 3, 4, 5]
遍历数组
// 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、高级语法
以上文提到的 Array的map为例,我们在OC当中常常会用到给数组添加方法 - category;在swift 3.0中,我们怎样实现给数组添加方法呢?
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 是数组中包含的元素类型的占位符,T 是元素转换之后的类型的占位符。map 函数本⾝并不关⼼ Element 和 T 究竟是什么,它们可以是任意类型。T 的具体类型将由调⽤者传⼊给map 的 transform ⽅法的返回值类型来决定。