一次使用惰性执行代码-Swift

时间:2018-09-27 22:56:05

标签: swift

我试图防止同时调用一个函数。为了测试这一点,我特意在viewdidload和viewwillappear中都调用了这两个函数。当我加载应用程序时,它只会被调用一次。但是,当我切换视图并返回到控制器时,“ viewwillappear”不会调用该函数吗?为什么会这样呢?我需要viewwillappear来调用该函数。

lazy var executeOnce: () -> Void = {
    print("hrlllo ")
    doSomething()
    return {}
}()


override func viewDidLoad() {
    super.viewDidLoad()

    executeOnce()

}


override func viewWillAppear(_ animated: Bool) {
    executeOnce()

}

1 个答案:

答案 0 :(得分:-1)

代码中的

executeOnce是存储的属性。在viewDidLoad()中调用它时,其定义中的闭包

{
    print("hrlllo ")
    doSomething()
    return {}
}

被评估。

在您的情况下,您将返回一个空的闭包{},然后使用()执行它,这等于void或不执行任何操作。该值Void是存储在属性executeOnce中的值。

因此,无论何时调用executeOnce(),都不会评估初始闭包,而是存储在被调用的executeOnce中的值Void中。因此,将不会执行任何操作。

关键字lazy仅将闭包的执行延迟到需要时为止。与仅评估一次的闭包无关。