Swift-闭包的使用和总结
来源:互联网 发布:剩余windows重置计数2 编辑:程序博客网 时间:2024/05/18 16:14
一、闭包的特点
- 1 预先定义好的代码
- 2 在需要的时候执行
- 3 可以当做参数传递
- 4 可以有返回值
- 5 包含self的时候,需要注意循环引用
二、闭包的定义格式
闭包 = {(形参) -> (返回值) in // 代码实现 }
in 用于区分函数定义和代码实现
三、闭包的分类
- 无参无返回值的闭包
- 有参无返回值的闭包
- 无参有返回值的闭包
- 有参有返回值的闭包
四、简单的闭包定义和调用
let block_F = { (str: String)->() in print(str) } /// 闭包的调用 block_F("Good Luck 2017") /// 最简单的闭包 /// 对于无参无返回值的闭包,"()->()" 可以省略 let block_G = { print("你好 2017") } /// 执行闭包 block_G()
五、闭包在实际开发中的的使用
1、定义闭包属性
/// 无参无返回值的闭包 var block_A:(()->())? /// 有参(一个)无返回值的闭包 var block_B:((String)->())? /// 有参(多个)无返回值的闭包 var block_C:((String,String)->())? /// 无参有返回值的闭包 var block_D:(()->(Int))? /// 有参有返回值的闭包 var block_E:((Int)->(Int))?
2、初始化闭包属性
block_A = { print("Hello 2017") } /// 注意:参数后面的"->()"可以省略 block_B = { (str: String)->() in print("接受到的数据 \(str)") } block_C = { (str1: String,str2: String)->() in print("接受到的数据 \(str1) \(str2)") } /// 注意:没有参数的闭包 参数前面的"()->)"不可以省略 block_D = { ()->(Int) in return 100 } block_E = { (num: Int)->(Int) in return num * 100 }
3、判断并定义执行闭包的函数
private func executeBlcok_A() { /// 判断闭包是否存在 if let block_A = block_A { block_A() } } private func executeBlcok_B() { /// 判断闭包是否存在 if let block_B = block_B { block_B("GoodBye 2016") } } private func executeBlcok_C() { /// 判断闭包是否存在 if let block_C = block_C { block_C("GoodBye 2016","Hello 2017") } } private func executeBlcok_D() { /// 判断闭包是否存在 if let block_D = block_D { let result = block_D() print(result) } } private func executeBlcok_E() { /// 判断闭包是否存在 if let block_E = block_E { let result = block_E(8) print(result) } }
4、闭包方法的执行以及闭包的执行
executeBlcok_A() executeBlcok_B() executeBlcok_C() executeBlcok_D() executeBlcok_E()
5、执行结果
image
六、闭包作为函数的函数进行回调
/// 闭包作为函数的函数进行回调 /// /// - Parameters: /// - page: 参数 /// - complete: 完成后的回调 private func getDataFromNetwork(page: Int,complete:@escaping ((AnyObject?,Bool?)->())){ /// 异步加载数据 DispatchQueue.global().async { /// ... /// ... /// 回到主线程 DispatchQueue.main.async { /// 模拟网络请求结果 let result: Bool = page > 0 if result { /// 如果请求成功,返回数据, let dict: [String: AnyObject] = Dictionary() complete(dict as AnyObject,true) } else { /// 如果请求失败,返回数据结果 complete(nil,false) } } } }
七、闭包作为函数的函数传递
/// 定义函数-1 /// /// - Parameter finished: 回调结果 private func getDataFromService(finished:((Bool)->())) { /// 闭包作为参数传递给下一个函数-2 calculation(result: finished) } /// 定义函数-2 /// /// - Parameter result: 回调结果 private func calculation(result:((Bool)->())){ result(true) }
0 0
- Swift-闭包的使用和总结
- Swift闭包的使用
- swift闭包的使用
- Swift 闭包的使用
- Swift闭包的使用
- Swift闭包和代理的简单使用
- 【swift-总结】闭包
- swift闭包总结
- Swift 的闭包使用(1)
- Swift语法基础:3 - Swift的函数和闭包
- swift里的函数和闭包
- Swift 闭包的使用(尾随闭包)
- Swift的闭包
- swift的闭包
- swift的基本使用(3)嵌套函数和闭包
- Swift学习记录 -- 14.闭包的使用和解决循环引用方法
- Swift基本使用-函数和闭包(三)
- Swift使用闭包表达式
- scrapy-redis 和 scrapy-splash结合 做分布式渲染爬取
- 《Java编程思想》学习笔记
- Android安全之防止被反编译
- poj 1077 Eight
- Linux下jenkins改端口、解决内存溢出、版本升级
- Swift-闭包的使用和总结
- 新的一年 新的打算 新的开始
- 腾讯学院运营课程第二天
- Protobuf详解
- https 证书校验异常 Trust anchor for certification path not found
- 关于NIO的理解及相关的例子
- 贝塞尔曲线拟合原理
- Android 压缩图片并转Base64方法之一
- google protobuf src安装运行