Swift延迟加载的一种用途
来源:互联网 发布:丹尼尔惠灵顿淘宝高仿 编辑:程序博客网 时间:2024/06/07 19:10
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;)
有以下一种情况:
我们试图用Cocoa的语音合成类NSSpeechSynthesizer来完成对字符串的朗读,这很容易.但是我们还有一个附加条件,就是在朗读完一段文本后触发一个动作.
这貌似也不难,我们只要遵守NSSpeechSynthesizerDelegate协议即可,但是光这样还不行,我们还必须将NSSpeechSynthesizer实例的delegate属性设置为合适的委托对象.
作为一个简单的例子,我们会用一个ViewController来作为NSSpeechSynthesizer的委托对象,所以我们可以这样写:
let speechSythesizer = NSSpeechSythesizer()override func viewDidLoad() { super.viewDidLoad() speechSynthesizer.delegate = self }
这样很美好,不过非要在viewDidLoad里面赋值委托对象吗?不可以在默认属性中来完成吗?
本猫想了一会,于是有了如下代码:
let speechSynthesizer:NSSpeechSynthesizer = { let tmp = NSSpeechSynthesizer() tmp.delegate = self return tmp }()
不幸的是,以上代码不能正确运行,因为其中的self并没有代表ViewController的实例对象.所以此路不通.
所幸的是Swift为我们提供了一种延时加载(又称惰性加载)属性的机制,我们可以这样写:
lazy var speechSynthesizer:NSSpeechSynthesizer = { var tmp = NSSpeechSynthesizer() tmp.delegate = self return tmp }()
很好很强大!
需要注意的是lazy修饰的属性初始化代码只会被运行一次,无论你访问该属性多少次!
0 0
- Swift延迟加载的一种用途
- Swift的lazy关键字–延迟加载
- 宏的一种用途
- Swift 3.0 延迟加载的几种实现方法
- Swift延迟加载简单介绍一二
- iBATIS的延迟加载
- spring 的延迟加载
- 延迟加载的学习
- iBATIS的延迟加载
- hibernate的延迟加载
- Hibernate的延迟加载
- hibernate 的延迟加载
- hibernate的延迟加载
- hibernate的延迟加载
- Ibatis的延迟加载
- 图片的延迟加载
- 图片的延迟加载
- Hibernate 的延迟加载
- 清明时节雨纷纷,心思却剪不断,理还乱
- FatMouse' Trade
- hdu 4547(LCA+Tarjan)
- 环形队列中实现队列的基本运算
- 蓝桥杯_算法提高_排列数(深度搜索、递归)
- Swift延迟加载的一种用途
- 文章标题
- FZU 2104 Floor problem(floor)
- service中获取sharedpreferences数据不同步
- 支付宝转账过程并发交易引起的分布式死锁问题
- 欢迎使用CSDN-markdown编辑器
- 基于cocoapods安装Masonry框架
- IBM也要开源机器学习平台
- CocoaPods安装和使用教程