Swift的学习(Closures(闭包))

学习地址:

https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html#//apple_ref/doc/uid/TP40014097-CH11-ID94

闭包

  闭包是具有特定功能的自包含模块,可以在代码中被传递和使用。 Swift 中的闭包与 C 和 Objective-C中的 blocks 以及其他一些编程语言中的 lambdas 比较相似。闭包可以 捕获 和存储其所在上下文中任意常量和变量的引用。 这就是所谓的闭合并包裹着这些常量和变量,俗称闭包。Swift会为您管理在 捕获 过程中涉及到的内存操作。
注意:如果您不熟悉 捕获 (capturing) 这个概念也不用担心,后面会详细对其进行介绍。
1、在Swift函数章节中介绍的全局和嵌套函数实际上也是特殊的闭包,闭包采取如下三种形式之一:

1)全局函数是一个有名字但不会捕获任何值的闭包

2)嵌套函数是一个有名字并可以捕获其封闭函数域内值的闭包

3)闭包表达式是一个利用轻量级语法所写的可以捕获其上下文中变量或常量值的没有名字的闭包

2 、闭包的使用例子
 在swift 标准库中有一个排序的闭包--》跟object——c里的代码块很类似 ;定义一个字符串数组, 将其排序,
   在定义这个排序方法的时候,有很多不确定因素,比如是整数排序,还是字符串排序,是从大到小,还是从小到大。。这些都是不确定的,当你遇到这种类似的情况,有不确定因素时,可以使用闭包;
  闭包的语法

{  (parameters)->return tope in
       statements
}
 下面是排序的使用 也说明了的闭包几种使用方式
//需要排序的数组
 let sortArray=["a1","bc","c","def","a2"]

//排序的方法  sorted(by:) 方法的使用需要传入一个闭包Closures
//方式1  定义一个闭包传进去
func backward(_ s1:String ,_ s2:String) -> Bool {
    return s1>s2
}
let sortResut0=sortArray.sort(backward)
print(sortResut0)
//方式二  根据当前上下文推断 s1,s2的类型  这里sortArray里的数据是字符串,那 s1,s2也是字符串
let sortResult = sortArray.sort { (s1, s2) -> Bool in
    return s1<s2
}
print(sortResult)

let sortResult2=sortArray.sort { s1,s2 in
    return s1>s2
}
print(sortResult2)
//方式三 速写参数名   如果没有声明参数名称的话,默认的是$0,$1,$2...
let sortResult3=sortArray.sort { $0>$1}
print(sortResult3)
//方式四 运算方式
let sortResult4=sortArray.sort(>)
print(sortResult4)
 对一个整数数组进行排序  当前 s1,s2 的类型就成了整数; 闭包的类型根据当前上下文决定
let sortArray2 = [1,2,3,0,-2,-3]
let sortResult6 = sortArray2.sort{(s1,s2)in
     return s1>s2
}
print(sortResult4)

未完 待续

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值