Swift延迟加载的一种用途

Swift延迟加载的一种用途,第1张

概述大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 有以下一种情况: 我们试图用Cocoa的语音合成类NSSpeechSynthesizer来完成对字符串的朗读,这很容易.但是我们还有一个附加条件,就是在朗读完一段文本后触发一个动作. 这貌似也不难,我们只要遵守NSSpeechSynthesizerDelegat

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! 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修饰的属性初始化代码只会被运行一次,无论你访问该属性多少次!

总结

以上是内存溢出为你收集整理的Swift延迟加载的一种用途全部内容,希望文章能够帮你解决Swift延迟加载的一种用途所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1077953.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存