Swift中闭包,懒加载,单例的写法区别
来源:互联网 发布:星光图片素材软件 编辑:程序博客网 时间:2024/05/18 23:56
闭包
闭包的参数和返回值都写在大括号里面,以”in”分隔开闭包内的代码块,如果闭包的参数和返回值都为空的话,”()->() in”就可以省略,下面是几种常见的闭包写法:
最简单的闭包:
//声明一个无参数无返回值的闭包,省略了参数返回值语句 let simpleClosure = { print("呵呵") } //调用闭包 simpleClosure()
有参数的闭包声明方法:
方式1
let callback = { (result: String) -> () in print("数据请完成,回调了,数据是 \(result)") // 更新 UI }
方式2,最外层括号可以前移到闭包名后面
loadData() { (result) -> () in print("数据=\(result)") }
方式3
loadData({ (result) -> () in print("数据=\(result)") })
懒加载:
在 Swift 中,懒加载本质就是一个闭包,在前面加上lazy关键字,
在需要这个属性的时候,会执行后面的闭包,并且把闭包的返回值记录下来,下次再次使用这个属性的时候,直接返回
懒加载的几种写法:
1.常用写法,可以在懒加载的同时对对象设置一些值
lazy var person: Person = { // 初始化 person 并且返回 let p = Person() p.name = "老王" print("我要起飞了...") return p}()
2.懒加载最简单的写法
lazy var person3: Person = Person()
3.测试代码,仅供参考
lazy var person2: Person = self.personFunc()let personFunc = { () -> Person in print("我继续起飞~~") return Person()}
把方法3改造一下:
lazy var person2: Person = { () -> Person in print("我继续起飞~~") return Person()}()
怎么样,是不是眼熟了许多呢~~~
单例
1.常用写法
// 在方法内部不能使用 static 修饰变量static var onceToken: dispatch_once_t = 0static var instance: HMSoundTools?// 在 Swift 单例与懒加载格式差不多// 把懒加载的 lazy var 改成 static letstatic let sharedTools2: HMSoundTools = { let instance = HMSoundTools() return instance}()
2.模仿 OC写法
static var onceToken: dispatch_once_t = 0static var instance: HMSoundTools?class func sharedTools() -> HMSoundTools {dispatch_once(&onceToken) { () -> Void in instance = HMSoundTools() } return instance!}
总结:懒加载与单例的实质都是”无参返回值是对象”的闭包,只不过是在定义闭包的同时就执行并返回对象了(大括号后面跟着的()语句),并且把返回值的类型提取到了等号的左边,可以对照懒加载写法1和单例的改造写法3仔细体会~
0 0
- Swift中闭包,懒加载,单例的写法区别
- Swift单例的写法
- swift 单例的写法
- Swift单例的写法
- swift 单例写法
- Swift的单例模式写法
- [Swift]swift单例模式的三种写法
- Swift单例写法(推荐)
- Java/Swift 单例模式的多种写法
- Swift中的单例的一种简单写法
- Swift 单例与懒加载
- Swift多种实现单例写法
- swift 单例模式正确写法
- ios-Swift中的单例写法
- 单例的写法
- 单例的写法
- 单例的写法
- 单例的写法
- 第一次写博客
- Unable to execute dex: Multiple dex files define 解决方法
- 【郝斌数据结构自学笔记】49-52_递归的定义和不同函数之间相互调程序举例_一个函数自己调自己程序举例
- Java基础_01_与Java的初次碰撞
- 文件方式缓存数据
- Swift中闭包,懒加载,单例的写法区别
- Analysis of Linux kernel crashes
- SVM(二)拉格朗日对偶问题
- Python——函数的高级话题(1)
- monkeyrunner-balabala.....
- 什么样的硬件设备在支撑 Stack Overflow?
- 【数据拾遗(java描述)】--- 哈夫曼树的基本实现
- Java 反射的再次学习
- Android一些小知识-不定时更新