Ответ 1
Свойство static
определяет свойство типа, которое создается один раз и только один раз. Как вы заметили, это происходит лениво, так как статика ведет себя как глобальные. И как Язык Swift Programming: Свойства говорит:
Глобальные константы и переменные всегда вычисляются лениво, аналогично Lazy Stored Properties. В отличие от ленивых хранимых свойств глобальные константы и переменные не должны быть помечены модификатором
lazy
.
Это неявное поведение связано с тем, что, поскольку Swift Blog: Files and Initialization говорит:
он позволяет настраивать инициализаторы, время запуска в Swift четко, без глобальных инициализаторов, чтобы замедлить его, и порядок выполнения полностью предсказуем.
Они сознательно разработали его таким образом, чтобы избежать излишней задержки запуска приложения.
Если вы хотите создать экземпляр свойства static
в какой-то определенной точке вашего приложения (вместо того, чтобы отложить его до того, где он впервые был использован), просто ссылайтесь на это свойство static
в этой более ранней точке, и объект будет инициализирован в то время. Учитывая усилия, которые мы прилагаем к сокращению времени ожидания при запуске наших приложений, вы обычно не захотите этого синхронно во время первого запуска приложения, но вы можете делать это там, где хотите.