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 自动为内联函数提供了参数名称缩写功能,您可以直接通过0,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)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 以下翻译自Apple官方文档,结合自己的理解记录下来。翻译基于 swift 3.0.1 原文地址 Closure...
    艺术农阅读 5,540评论 0 3
  • Swift-闭包 Swift闭包的含义 闭包是自包含的功能代码块,可以用作函数的参数或者返回值 闭包可以捕获上下文...
    stackJolin阅读 4,985评论 0 2
  • 前言:swift是一门很优雅,很简洁,功能很强大的语言,同时也是一门很复杂的语言。进门比较简单,看完苹果官方的文档...
    一剑孤城阅读 11,376评论 0 10
  • 我叫岑薇薇,目前就职于一家传统制造企业,从事销售管理工作。 一般人看别人介绍完职业后,心理马上对此人进行大致评判,...
    cenweiwei阅读 3,633评论 5 3
  • 构图的目的是为了处理画面中各个元素的布局。而我们知道,在影像所处的二维平面中,一切元素都是以「点线面」的形式存在的...
    LikeAKid阅读 1,580评论 0 0

友情链接更多精彩内容