美文网首页
第三周第二天

第三周第二天

作者: theDeskmateOfSb | 来源:发表于2016-08-12 08:43 被阅读0次

    第三周第二天

    函数作为参数,匿名函数(闭包)尾随闭包

    func sum(a: Int, _ b: Int) -> Int {
        return a + b
    }
    
    func mul(a: Int, _ b: Int) -> Int {
        return a * b
    }
    
    // 在Swift中函数是一种类型
    // 这也就意味着函数可以作为变量或常量的类型
    // 同理函数也可以作为另一个函数的参数或返回值
    func foo(array: [Int], fn: (Int, Int) -> Int) -> Int {
        var sum = array[0]
        for x in array[1..<array.count] {
            sum = fn(sum, x)
        }
        return sum
    }
    
    let a = [1, 2, 3, 4, 5]
    // 当调用foo函数时第二个参数可以传什么?
    // 1. 所有自定义的(Int, Int) -> Int类型的函数
    print(foo(a, fn: sum))
    // 2. 传入已有的二元运算符: +-*/%(因为运算符也是函数)
    print(foo(a, fn: +))
    // 3. 传入匿名函数(闭包)
    // 3.1 完整的闭包写法
    print(foo(a, fn: { (a, b) -> Int in
        return a + b
    }))
    // 3.2 省略掉类型和不必要的括号
    print(foo(a, fn: { a, b in a + b }))
    // 3.3 省略参数名
    print(foo(a, fn: { $0 + $1 }))
    // 3.4 尾随闭包
    print(foo(a) { (a, b) -> Int in
        return a + b
    })
    print(foo(a) { $0 + $1 })
    

    闭包,尾随闭包

    var array = ["game", "abacus", "hello", "cat", "good", "internationalization", "chaos", "dislike", "zealot", "young"]
    
    // array.sortInPlace(>)
    array.sortInPlace({ $0 > $1 })
    // array.sortInPlace() { $0 > $1 }
    // array.sortInPlace { $0 > $1 }
    // 如果函数的最后一个参数是闭包可以写成尾随闭包的形式
    // 也就是将闭包放到函数参数的圆括号外面写在一对花括号中
    // 如果函数后面有尾随闭包且函数的圆括号中没有参数
    // 那么函数的圆括号也可以省略(仅限于有尾随闭包的场景)
    array.sortInPlace {
        if $0.characters.count == $1.characters.count {
            return $0 < $1
        }
        return $0.characters.count < $1.characters.count
    }
    print(array)
    

    数组的过滤,缩减,映射

    let array = [23, 37, 96, 55, 40, 92, 68, 88]
    
    // 1. 过滤
    let newArray1 = array.filter { $0 > 50 }
    print(newArray1)
    
    let newArray2 = array.filter { $0 % 2 == 0 }
    print(newArray2)
    
    // 2. 映射
    let newArray3 = array.map { $0 * $0 }
    print(newArray3)
    let newArray4 = array.map { sqrt(Double($0)) }
    print(newArray4)
    
    // 3. 缩减
    let result1 = array.reduce(0, combine: +)
    print(result1)
    let result2 = array.reduce(1, combine: *)
    print(result2)
    let result3 = array.reduce(array[0]) {
        $1 > $0 ? $1 : $0
    }
    print(result3)
    
    let strArray = ["I", "love", "you"]
    let result4 = strArray.reduce("") { $0 + " " + $1 }
    print(result4)
    

    相关文章

      网友评论

          本文标题:第三周第二天

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