Swift语法点

  • guard语法

guard语句和if语句有点类似,都是根据其关键字之后的表达式的布尔值决定下一步执行什么。
但与if语句不同的是,guard语句只会有一个代码块,不像if语句可以if else多个代码块。
可以把guard近似的看做是Assert,但是你可以优雅的退出而非崩溃。

guard ... else {return} guard let ... else {return}相当于if not { return }

  • for in 循环

    //循环三次
    for i in 0...2 { 
    }
    //循环三次
    for _ in 0..<3 {
    }
    //循环imageCount次
    for i in 0...imageCount - 1 {
    }
    //循环imageCount次
    for var i = 0; i < imageCount; i ++ {
    }
    
数组的reduce,map,filter,forEach方法
  • forEach(遍历)

    let arr = [1, 2, 4]
    arr.forEach {
        print($0)
    }
    
  • map(映射)

    对数组元素进行某种规则的转换

    let arr = [1, 2, 4]
    let brr = arr.map {
        "No." + String($0)
    } 
    //brr = ["No.1", "No.2", "No.3"]
    
  • filter(筛选)

    对数组元素进行某种规则的过滤

    let arr = [1, 2, 4]
    let brr = arr.filter {
        $0 % 2 == 0
    }
    //brr = [2, 4]
    
  • reduce(累加)

    基础思想是将一个序列转换为一个不同类型的数据,期间通过一个累加器(Accumulator)来持续记录递增状态。

    它是 SequenceType 中的一个方法,看起来是这样的(简化版本):

    func reduce<T>(initial: T, combine: (T, Self.Generator.Element) -> T) -> T
    

    它拥有一个初始值(Initial value)以及一个闭包(返回值类型和初始值类型一致)。函数最后的返回值同样和初始值类型一致,为 T。

    对数组累加操作实现:

    func combinator(accumulator: Int, current: Int) -> Int {
          return accumulator + current
    }
    [1, 2, 3].reduce(0, combine: combinator)
    // 执行步骤如下
    combinator(0, 1) { return 0 + 1 } = 1
    combinator(1, 2) { return 1 + 2 } = 3
    combinator(3, 3) { return 3 + 3 } = 6
    = 6
    

    使用reduce方法实现map的功能

    let arr = [1, 2, 4]
    let brr = arr.reduce([]) {
        (sum : [Int] , current: Int) -> [Int] in
        var t = Array(sum)
        t.append(current * 2)
        return t
    }
    // brr = [2, 4, 8]
    //此方法如果数组很大, reduce第一个参数会不断在参数传递过程被复制然后丢弃, 运行效率很有问题。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容