什么是swift闭包?

闭包(Closures)是自包含的功能代码块(就像是使用轻量级语法实现的函数),可以在代码中使用或者用来作为参数传值。
Swift 中的闭包与 C 和 Objective-C 中的代码块(blocks)以及其他一些编程语言中的 匿名函数比较相似。
全局函数和嵌套函数其实就是特殊的闭包。

语法:

{(parameters) -> return type in
   statements
}

//实例:
let divide = {(val1: Int, val2: Int) -> Int in 
   return val1 / val2 
}
let result = divide(200, 20)
print (result)

闭包表达式
闭包表达式是一种利用简洁语法构建内联闭包的方式。 闭包表达式提供了一些语法优化,使得撰写闭包变得简单明了。
用Swift 标准库提供了名为 sorted(by:) 的方法,这种方法会据您提供的用于排序的闭包函数将已知类型数组中的值进行排序。
我们在这里用一个闭包表达式 来定义Java中的比较器。

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

// 使用普通函数(或内嵌函数)提供排序功能,闭包函数类型需为(String, String) -> Bool。
func backwards(s1: String, s2: String) -> Bool {
    return s1 > s2
}
var reversed = names.sorted(by: backwards)

print(reversed)
//print result: ["S", "D", "BE", "AT", "AE"]

//甚至可以更简单
let names = ["AT", "AE", "D", "S", "BE"]

var reversed = names.sorted( by: { $0 > $1 } ) //$0和$1表示闭包中第一个和第二个String类型的参数。
print(reversed)

//甚至可以更简单
let names = ["AT", "AE", "D", "S", "BE"]

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

尾随闭包是什么?

posted @ 2020-06-21 09:46  EvanMeetTheWorld  阅读(34)  评论(0)    收藏  举报