swift语言点评四-Closure

Posted zzfx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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!"

 

以上是关于swift语言点评四-Closure的主要内容,如果未能解决你的问题,请参考以下文章

swift语言点评二

swift语言点评三 - Basic Operators

swift语言点评十二-Subscripts

swift语言点评十九-类型转化与检查

swift语言点评十七-Designated Initializers and Convenience Initializers

IOS系列swift语言之课时四