美文网首页
闭包-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