使用惰性执行代码一次 - Swift
Posted
技术标签:
【中文标题】使用惰性执行代码一次 - Swift【英文标题】:Using lazy this execute code once - Swift 【发布时间】:2019-03-03 21:48:47 【问题描述】:我试图阻止同时调用一个函数。为了测试这一点,我特意在 viewdidload 和 viewwillappear 中调用了这两个函数。当我加载应用程序时,它只会被调用一次。但是当我切换视图并返回控制器时,“viewwillappear”不会调用该函数?为什么会这样。我需要 viewwillappear 来调用该函数。
lazy var executeOnce: () -> Void =
print("hrlllo ")
doSomething()
return
()
override func viewDidLoad()
super.viewDidLoad()
executeOnce()
override func viewWillAppear(_ animated: Bool)
executeOnce()
【问题讨论】:
那么,由于已经在viewDidLoad
中调用了该函数,因此没有调用该函数似乎是正确的?我不确定我是否明白你的问题。另外,您忘记调用 super.viewWillAppear(animated)。
【参考方案1】:
executeOnce
在您的代码中是一个存储属性。在viewDidLoad()
中调用时,其定义中的闭包
print("hrlllo ")
doSomething()
return
被评估。
在您的情况下,您将返回一个空闭包 ,然后使用
()
执行它,这等于 void 或什么都不做。此值Void
是存储在您的属性executeOnce
中的值。
所以,无论何时调用executeOnce()
,初始闭包都不会被求值,而是被调用的executeOnce
中存储的值,即Void
。因此,不会执行任何操作。
关键字lazy
只会延迟闭包的执行,直到需要。它与只评估一次的闭包无关。
【讨论】:
以上是关于使用惰性执行代码一次 - Swift的主要内容,如果未能解决你的问题,请参考以下文章