美文网首页
闭包-Closures [swift 5.1]

闭包-Closures [swift 5.1]

作者: 阿狸小朋友 | 来源:发表于2019-06-16 18:05 被阅读0次
    1. 闭包的语法
    定义:
    { (`参数`) -> `返回类型` in
       `代码块`
    }
    
    例如:
    1.1 一般表达式
    reversedNames = names.sorted(by: { (s1: String, s2: String) -> Bool in
        return s1 > s2
    })
    
    1.2 从上下文中推断类型
    reversedNames = names.sorted(by: { s1, s2 in return s1 > s2 } )
    
    1.3 单行表达式可以省略 return(单行表达式是指闭包函数体只包含了一个单一表达式s1 > s2)
    reversedNames = names.sorted(by: { s1, s2 in s1 > s2 } )
    
    1.4 参数名称缩写($0 和 $1 表示闭包中第一个和第二个 String 类型的参数)
    reversedNames = names.sorted(by: { $0 > $1 } )
    
    1.5 运算符缩写($0 和 $1 表示闭包中第一个和第二个 String 类型的参数)
    reversedNames = names.sorted(by: >)
    
    
    1. 尾随闭包
    func someFunctionThatTakesAClosure(closure: () -> Void) {
        // function body goes here
    }
    
    尾随闭包能将闭包内容放到函数调用的后面,前提是闭包参数在参数列表的最后面
    someFunctionThatTakesAClosure() {
        // trailing closure's body goes here
    }
    
    1. 闭包逃离
    通过设置关键字@escaping 能将闭包存储外部数组中
    var completionHandlers: [() -> Void] = []
    func someFunctionWithEscapingClosure(completionHandler: @escaping () -> Void) {
        completionHandlers.append(completionHandler)
    }
    
    1. 自动闭包
    通过设置关键字@ autoclosure 能将接收到的表达式自动闭包
    var customersInLine = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
    func serve(customer customerProvider: @autoclosure () -> String) {
        print("Now serving \(customerProvider())!")
    }
    serve(customer: customersInLine.remove(at: 0))
    // Prints "Now serving Ewa!"
    

    相关文章

      网友评论

          本文标题:闭包-Closures [swift 5.1]

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