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!"
  • 相关阅读:
    django 项目需要注意的一些点
    VUE之路
    Oracle 表格碎片的查看方法
    RHEL 6.x or 7.x 使用分区绑定ASM 磁盘的方法
    RMAN 修复主库 nologging 操作导致物理备库的坏块
    Oracle 数据库19c 回退降级到 11.2.0.4 方案
    如何评估oracle 数据库rman全备和增量备份大小
    在将Oracle GI和DB升级到19c或降级到以前的版本之前需要应用的补丁 (Doc ID 2668071.1)
    Oracle 数据库坏块处理
    opatch auto 安装11.2.0.4.20190115 PSU遇到 OUI-67133: Execution of PRE script failed,with returen value 1 报错
  • 原文地址:https://www.cnblogs.com/feng9exe/p/8708866.html
Copyright © 2011-2022 走看看