Swift中的闭包
来源:互联网 发布:五五开拉黑淘宝权 编辑:程序博客网 时间:2024/05/17 02:26
Swift中的闭包和OC中的block非常相似
OC中的block是匿名的函数;
Swift中的闭包是一个特殊的函数;
block和闭包都经常用于回调
先学习Swift的闭包,必须先搞清楚OC中的block
同样写一个网络请求工具类
// HttpTool.swiftimport UIKitclass HttpTool: NSObject { var callBack: ((jsonData:String)->())? // 闭包的类型:(参数列表) -> (返回值类型) func loadData(callBack: (jsonData:String) -> ()){ self.callBack = callBack dispatch_async(dispatch_get_global_queue(0, 0)) { print("发送网络请求:\(NSThread.currentThread())") dispatch_async(dispatch_get_main_queue(), { print("获取到数据并且进行回调:\(NSThread.currentThread())") // 执行回调函数 callBack(jsonData: "jsonData") }) } }}
// ViewController.swiftimport UIKitclass ViewController: UIViewController { var tools : HttpTool = HttpTool() override func viewDidLoad() { super.viewDidLoad() } override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { weak var weakSelf = self tools.loadData { (jsonData) in// print("在ViewController中拿到数据:\(jsonData)") // weakSelf?.view 表示前面的可选类型没有值后面的代码不会执行 // 如果前面的可选类型有值,系统会自动将weakSelf进行解包并且使用 weakSelf?.view.backgroundColor = UIColor.redColor() } } // 相当于OC中的dealloc方法, deinit { print("ViewController ---- deinit") }}
上面解决循环引用问题的方式是定义:
weak var weakSelf = self
还有第二种解决循环引用的方式(推荐):
tools.loadData {[weak self] (jsonData) in self?.view.backgroundColor = UIColor.redColor() }
第三种方式:
tools.loadData {[unowned self] (jsonData) in self.view.backgroundColor = UIColor.redColor()}
尾随闭包的概念
如果我们的闭包作为方法的最后一个参数,那么这个方法可以把小括号()省略
上面我们我们的loadData()方法就省略了小括号。
tools.loadData( {[weak self] (jsonData) in self?.view.backgroundColor = UIColor.redColor()})
0 0
- swift中的闭包
- swift中的闭包
- swift中的闭包
- Swift中的闭包
- Swift中的闭包
- Swift中的闭包
- Swift 中的闭包
- Swift中的闭包
- 10.Swift 中的闭包
- 浅学swift中的闭包
- 011--swift中的闭包
- ios-Swift中的闭包
- Swift语言中的闭包运算(Closure)
- Swift中的闭包(Closure)
- Swift中的闭包(Closure)
- Swift 中的闭包循环引用
- Swift中的闭包(Closures)
- Swift中的函数和闭包
- 第三周 项目4 顺序表应用
- 如何获取Android设备唯一识别码
- hdoj-2084-数塔
- div居中
- 谈谈数据库连接池的原理
- Swift中的闭包
- LAMP中php安装后的解析失败问题
- iOS 10下Webkit如何获取位置信息?
- Centos7 关闭防火墙
- 九度1082
- java中各种集合的区别与联系
- animate.css 全部代码分析
- android.permission权限资料详解
- 数据库连接池最小连接数和最大连接数: