美文网首页
Swift Closure闭包

Swift Closure闭包

作者: 点滴86 | 来源:发表于2016-08-07 16:42 被阅读26次

    函数也是一种闭包

    import UIKit
    
    // 函数也是一种闭包
    
    func backward(s1: String, s2: String) -> Bool {
        return s1 > s2
    }
    
    let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
    
    var reversedNames = names.sort(backward)
    print("函数也是一种闭包")
    print(reversedNames)
    

    console log 如下


    函数也是一种闭包.png

    闭包表达式

    // 闭包表达式
    /*
     *  { (parameters) -> return type in
     *      statements
     *  }
     */
    reversedNames = names.sort({
        (s1: String, s2: String) -> Bool in
        return s1 > s2
    })
    print("闭包表达式")
    print(reversedNames)
    

    console log 如下


    闭包表达式.png

    闭包中的参数类型推断

    // 闭包中的参数类型推断
    reversedNames = names.sort({
        (s1, s2) -> Bool in
        return s1 > s2
    })
    print("闭包中的参数类型推断")
    print(reversedNames)
    

    console log 如下


    闭包中的参数类型推断.png

    闭包中参数类型和返回类型的推断

    // 闭包中参数类型和返回类型的推断
    reversedNames = names.sort({
        s1, s2 in
        return s1 > s2
    })
    print("闭包中参数类型和返回类型的推断")
    print(reversedNames)
    

    console log 如下


    闭包中参数类型和返回类型的推断.png

    闭包中只有单行表达式省略掉return关键字

    // 闭包中只有单行表达式省略掉return关键字
    reversedNames = names.sort({
        s1, s2 in
        s1 > s2
    })
    print("闭包中只有单行表达式省略掉return关键字")
    print(reversedNames)
    

    console log 如下


    闭包中只有单行表达式省略掉return关键字.png

    闭包中参数简写

    // 闭包中参数简写
    reversedNames = names.sort({
        $0 > $1
    })
    print("闭包中参数简写")
    print(reversedNames)
    

    console log 如下


    闭包中参数简写.png

    操作符函数

    // 操作符函数
    reversedNames = names.sort(>)
    print("操作符函数")
    print(reversedNames)
    

    console log 如下


    操作符函数.png

    挂尾闭包

    // 挂尾闭包
    reversedNames = names.sort() {
        $0 > $1
    }
    print("挂尾闭包")
    print(reversedNames)
    

    console log 如下


    挂尾闭包.png

    挂尾闭包只有一个参数

    // 挂尾闭包只有一个参数
    reversedNames = names.sort {
        $0 > $1
    }
    print("挂尾闭包只有一个参数")
    print(reversedNames)
    

    console log 如下


    挂尾闭包只有一个参数.png

    挂尾闭包例子

    // 挂尾闭包例子
    let digitNames = [
        0: "Zero", 1: "One", 2: "Two", 3: "Three", 4: "Four",
        5: "Five", 6: "Six", 7: "Seven", 8: "Eight", 9: "Nine"]
    let numbers = [1992, 8, 5, 520]
    var strings = numbers.map {
        (number) -> String in
        var number = number
        var output = ""
        while number > 0 {
            output = digitNames[number % 10]! + output
            number /= 10
        }
        
        return output
    }
    print("挂尾闭包例子")
    print(strings)
    

    console log 如下


    挂尾闭包例子.png

    值捕获

    // 值捕获
    func makeIncrementer(amount: Int) -> () -> Int {
        var runningTotal = 0
        func incrementer() -> Int {
            runningTotal += amount
            return runningTotal
        }
        
        return incrementer
    }
    
    print("值捕获")
    let incrementByTen = makeIncrementer(10)
    print(incrementByTen())
    print(incrementByTen())
    print(incrementByTen())
    
    let incrementBySeven = makeIncrementer(7)
    print(incrementBySeven())
    print(incrementBySeven())
    print(incrementBySeven())
    

    console log 如下


    值捕获.png

    相关文章

      网友评论

          本文标题:Swift Closure闭包

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