码迷,mamicode.com
首页 > 编程语言 > 详细

swift语言点评四-Closure

时间:2018-04-03 17:31:50      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:trail   constant   dig   hand   print   ring   cal   pos   following   

总结:整个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

标签:trail   constant   dig   hand   print   ring   cal   pos   following   

原文地址:https://www.cnblogs.com/feng9exe/p/8708866.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!