zoukankan      html  css  js  c++  java
  • swift语言点评四-Closure

    总结:整个Closure的作用在于简化语言表述形式。

    一、闭包的简化

    Closure expression syntax has the following general form:

    • { () -> in
    •     }
    • reversedNames = names.sorted(by: { (s1: String, s2: String) -> Bool in
    •     return s1 > s2
    • })

    Because the sorting closure is passed as an argument to a method, Swift can infer the types of its parameters and the type of the value it returns. 

    reversedNames = names.sorted(by: { s1, s2 in return s1 > s2 } )

    Implicit Returns from Single-Expression Closures

    reversedNames = names.sorted(by: { s1, s2 in s1 > s2 } )

    Shorthand Argument Names

    Swift automatically provides shorthand argument names to inline closures, which can be used to refer to the values of the closure’s arguments by the names $0, $1, $2, and so on.

    reversedNames = names.sorted(by: { $0 > $1 } )

    Operator Methods

    reversedNames = names.sorted(by: >)

    二、拖尾变换

    • func someFunctionThatTakesAClosure(closure: () -> Void) {
    •     // function body goes here
    • }
    •  
    • // Here's how you call this function without using a trailing closure:
    •  
    • someFunctionThatTakesAClosure(closure: {
    •     // closure's body goes here
    • })
    •  
    • // Here's how you call this function with a trailing closure instead:
    •  
    • someFunctionThatTakesAClosure() {
    •     // trailing closure's body goes here
    • }

    闭包的实现在函数参数列表外;

    再次精简

    reversedNames = names.sorted() { $0 > $1 }

    reversedNames = names.sorted { $0 > $1 }

    完全移出

    • let strings = numbers.map { (number) -> String in
    •     var number = number
    •     var output = ""
    •     repeat {
    •         output = digitNames[number % 10]! + output
    •         number /= 10
    •     } while number > 0
    •     return output
    • }

    Closures Are Reference Types

    Whenever you assign a function or a closure to a constant or a variable, you are actually setting that constant or variable to be a reference to the function or closure.

    Escaping Closures

    异步解决方案

    Autoclosures

    表达式语句

    • // customersInLine is ["Ewa", "Barry", "Daniella"]
    • func serve(customer customerProvider: @autoclosure () -> String) {
    •     print("Now serving (customerProvider())!")
    • }
    • serve(customer: customersInLine.remove(at: 0))
    • // Prints "Now serving Ewa!"
  • 相关阅读:
    HDU
    POJ-1325 Machine Schedule 二分图匹配 最小点覆盖问题
    HDU- 6437.Videos 最“大”费用流 -化区间为点
    曼哈顿最小生成树 全网最全
    牛客 136G-指纹锁 set容器重载
    牛客 136J-洋灰三角 +高中数学博大精深
    数学:矩阵快速幂
    数学:Burnside引理与Pólya定理
    数据结构:树上分块
    数据结构:Bitset
  • 原文地址:https://www.cnblogs.com/feng9exe/p/8708866.html
Copyright © 2011-2022 走看看