Swift常见闭包表达式及其简写案例

闭包的概念(Closure)

  • 闭包是可以在你的代码中被传递和引用的功能性独立代码块
  • 闭包能够捕获和存储定义在其上下文中的任何常量和变量的引用,这也就是所谓的闭合并包裹那些常量和变量,因此被称为“闭包”,Swift能够为你处理所有关于捕获的内存管理操作

 

{ (parameters) -> (return type) in
   statements
}

 

结合代码案例进行阐述:

let names = ["zhangsan","lisi","wangwu","zhaoliu"]
// 这里是定义一个函数,传递进去排序的
func backward(_ s1:String, _ s2:String) -> Bool{
    return s1 > s2
}
var reversedNames = names.sorted(by: backward)
print(reversedNames)
// 日志打印输出结果
["zhaoliu", "zhangsan", "wangwu", "lisi"]

 

A.闭包表达式版本

let names = ["zhangsan","lisi","wangwu","zhaoliu"]

// 定义一个标准的闭包表达式
var reversedNames = names.sorted(by: {(s1: String, s2: String) -> Bool in
    return s1 > s2
})
print(reversedNames)

 

B.语境推断类型

let names = ["zhangsan","lisi","wangwu","zhaoliu"]

// 语境推断类型
var reversedNames = names.sorted(by: {s1, s2 in return s1 > s2 })
print(reversedNames)

 

C.单表达式闭包隐式返回

let names = ["zhangsan","lisi","wangwu","zhaoliu"]

// 单表达式闭包隐式返回,省略return
var reversedNames = names.sorted(by: {s1, s2 in s1 > s2 })
print(reversedNames)

 

D.简写实际参数名

let names = ["zhangsan","lisi","wangwu","zhaoliu"]

// 在swift自动对行内闭包提供简写实际参数名
var reversedNames = names.sorted(by: {$0 > $1 })
print(reversedNames)

 

E.运算符函数

let names = ["zhangsan","lisi","wangwu","zhaoliu"]

// 在swift的String中定义了关于“>”的特定字符实现
var reversedNames = names.sorted(by: >)
print(reversedNames)

 

F.尾随闭包

let names = ["zhangsan","lisi","wangwu","zhaoliu"]

// 尾随闭包是一个被书写再函数形式参数的括号外面(后面)的闭包表达式
var reversedNames = names.sorted { $0 > $1 }
print(reversedNames)

 

版权声明:
作者:Amber
链接:https://late.run/archives/143
来源:LATE-努力努力再努力
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录