swift3.0-学习小记 ~数组

数组

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(_ 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 ⽅法的返回值类型来决定。

你可能感兴趣的:(swift3.0-学习小记 ~数组)