executeOnce
в вашем коде является сохраненным свойством.Когда он вызывается в viewDidLoad()
, вычисляется замыкание в его определении
{
print("hrlllo ")
doSomething()
return {}
}
.
В вашем случае вы возвращаете пустое закрытие {}
, а затем выполняете его с помощью ()
, что равно void или ничего не делать.Это значение Void
хранится в вашей собственности executeOnce
.
Таким образом, всякий раз, когда вы вызываете executeOnce()
, начальное закрытие не оценивается, а является значением, хранящимся в executeOnce
, которое вызывается, то есть Void
.И, таким образом, ничего не будет выполнено.
Ключевое слово lazy
будет только задерживать выполнение замыкания до тех пор, пока оно не потребуется.Это не имеет ничего общего с замыканием, оцененным только один раз.