Swift--闭包--06

  • 闭包(Closure)在本质上等于函数,和oc的block类似
  • 闭包是一种函数的简写形式,省去函数名,把参数和返回值放入{}内。
//语法
{(parameters) -> (return type) in
   statements
}

闭包的基本演示:

let studname = { print("Swift 闭包实例。") }
studname()


var numArray = [1,3,5,6,7,0]

//sorter函数用于对数组的排序,只接受一个函数型参数,描述排序逻辑
//正序
var numArray1 = numArray.sorted()

func daoxu1(a:Int,b:Int) -> Bool {
    return a > b
}
var numArray2 = numArray.sorted(by: daoxu1)

//用闭包表达式

var numArray3 = numArray.sorted { (a, b) -> Bool in
    return a > b
}
numArray3

//闭包的自动推断
//可使用快捷参数,前缀$,从0开始递增
var numArray4 = numArray.sorted { $0 > $1}
numArray4

参数名称缩写:

Swift 自动为内联函数提供了参数名称缩写功能,您可以直接通过1,$2来顺序调用闭包的参数。
如果你在闭包表达式中使用参数名称缩写, 您可以在闭包参数列表中省略对其定义, 并且对应参数名称缩写的类型会通过函数类型进行推断。in 关键字同样也可以被省略.

var numArray = [1,3,5,6,7,0]
var numArray4 = numArray.sorted { $0 > $1}
print(numArray4)

运算符函数

Swift 的String类型定义了关于大于号 (>) 的字符串实现,其作为一个函数接受两个String类型的参数并返回Bool类型的值。 而这正好与sort(_:)方法的第二个参数需要的函数类型相符合。 因此,您可以简单地传递一个大于号,Swift可以自动推断出您想使用大于号的字符串函数实现:

let names = ["AT", "AE", "D", "S", "BE"]

var reversed = names.sorted(by: >)
print(reversed)

尾随闭包

尾随闭包是一个书写在函数括号之后的闭包表达式,函数支持将其作为最后一个参数调用。

func someFunctionThatTakesAClosure(closure: () -> Void) {
    // 函数体部分
}

// 以下是不使用尾随闭包进行函数调用
someFunctionThatTakesAClosure({
    // 闭包主体部分
})

// 以下是使用尾随闭包进行函数调用
someFunctionThatTakesAClosure() {
  // 闭包主体部分
}
let names = ["AT", "AE", "D", "S", "BE"]

//尾随闭包---sorted() 后的 { $0 > $1} 为尾随闭包。
var reversed = names.sorted() { $0 > $1 }
print(reversed)

你可能感兴趣的:(Swift--闭包--06)