美文网首页OC开发学习swift
swift3.0-学习小记 ~数组

swift3.0-学习小记 ~数组

作者: 西溪码农512 | 来源:发表于2017-06-01 10:37 被阅读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<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 ⽅法的返回值类型来决定。

    相关文章

      网友评论

        本文标题:swift3.0-学习小记 ~数组

        本文链接:https://www.haomeiwen.com/subject/nisjfxtx.html