微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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)

未完 待续

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐