全局变量/常量如何快速懒惰

问题描述 投票:0回答:1

来自docs.swift.org

全局变量

全局常量和变量总是以与惰性存储属性类似的方式延迟计算。与惰性存储的属性不同,全局常量和变量不需要使用惰性修饰符进行标记。

类型属性

存储的类型属性在第一次访问时被延迟初始化。

因此,我如下测试了它们的懒惰性

import Foundation
import CoreFoundation

var s = Date()
struct Sam {
    static let s  = Date()
}


print(Date())

Timer.scheduledTimer(withTimeInterval: 2.0, repeats: false, block: { (t) in
    print(Sam.s)
    print(s)
    exit(0)
})

CFRunLoopRun()

我没有在操场上跑步。来自forums.swift.org的人建议不要在操场上跑步。

所以我将其存储在名为main.swift的文件中,然后使用swift main.swift运行它>

其输出如下

2020-04-16 18:23:48 +00002020-04-16 18:23:50 +00002020-04-16 18:23:48 +0000

因此type属性延迟初始化,但是全局变量不会延迟初始化。因此,这实际上意味着全局变量/常量是惰性计算的。

提前感谢。

摘自docs.swift.org全局变量全局常数和变量总是以与惰性存储属性类似的方式惰性计算的。与惰性存储的属性不同,全局常量...

swift global lazy-initialization
1个回答
0
投票

根据您链接的论坛主题,main.swift的范围类似于Swift Playground的范围,在顶层声明的变量被视为局部变量,而不是全局变量。

© www.soinside.com 2019 - 2024. All rights reserved.