Closure 是什么
Closure闭包实在是太有用了!您可能已经知道这一点,但是闭包是您可以传递的代码块,并可以在代码的其他地方使用
Closure使命就是让代码紧凑且模块化
就像可以分配给变量的函数一样。您可以在代码中四处移动变量,并在以后调用闭包的代码。
let closure = { (name:String) -> String in
return "Hello, \(name)!"
}
let message = closure("Bob")
print(message)
在上面的示例中,常量闭包包含一个闭包。此闭包采用一个称为String类型名称的参数。然后,闭包本身返回一个字符串-各种各样的问候。
在上述示例中,当使用closure(“ Bob”)调用闭包时,其值将分配给常量消息并打印出来。
闭包的常见用例是所谓的完成处理程序。
假设您要从网络下载要显示在视图控制器中的图像。使用Alamofire(Swift的流行网络和Web请求库),您的代码应如下所示:
Alamofire.request(imageURL).responseData {
response in
if let data = response.result.value {
self.imageView?.image = UIImage(data: data)
}
}
如您所见,发出了一个Web请求,该请求已链接到对函数responseData(queue:completionHandler :)的调用。只有一个参数提供给该函数-一个闭包。
在闭包内部,将响应展开,并将其数据用于将图像数据分配给属性imageView。
此关闭是完成处理程序。当下载图片的请求完成时执行。换句话说:您可以使用闭包来确定特定动作完成后会发生什么(因此称为“完成处理程序”)。
封闭功能非常强大。在上面的示例中,闭包与请求发送到Web图像的位置相同,并且与imageView属性(和出口)位于相同的文件中。
实际下载图像并对其进行处理的代码在项目的其他位置,完全不同的位置。多亏了闭包,我们可以传递功能,保持关注点分离以及使我们的代码紧凑而模块化。
Closure与escapeing关系
出于性能方面的考虑,Swift假定所有闭包都是不冒号的闭包,这意味着它们将在函数内部立即使用而不被存储,这反过来意味着Swift不会触及引用计数。如果不是这种情况(如果您采取了任何措施来存储闭包),那么Swift将迫使您将其标记为@escapeing,以便必须更改引用计数。
推荐
基础文章推荐
经典教程推荐
- onevcat 大神的《SwiftUI 与 Combine 编程》
- 更新近百篇SwiftUI教程《SwiftUI2020教程》
- 帮您突破数据存储难关《SwiftUI vs CoreData数据存储解决方案》
技术源码推荐
推荐文章
CoreData篇
TextField篇
- 《SwiftUI 一篇文章全面掌握TextField文本框 (教程和全部源码)》
- 《SwiftUI实战之TextField风格自定义与formatters》
- 《SwiftUI实战之TextField如何给键盘增加个返回按钮(隐藏键盘)》
- 《SwiftUI 当键盘出现时避免TextField被遮挡自动向上移动》
- 《SwiftUI实战之TextField如何给键盘增加个返回按钮(隐藏键盘)》
JSON文件篇
一篇文章系列
- SwiftUI一篇文章全面掌握List(教程和源码)
- 《SwiftUI 一篇文章全面掌握TextField文本框 (教程和全部源码)》
- SwiftUI一篇文章全面掌握Picker,解决数据选择(教程和源码)
- SwiftUI一篇文章全面掌握Form(教程和源码)
- SwiftUI Color 颜色一篇文章全解决
技术交流
QQ:3365059189
SwiftUI技术交流QQ群:518696470
- 请关注我的专栏icloudend, SwiftUI教程与源码
https://www.jianshu.com/c/7b3e3b671970