Swift静态函数调用后属性值为何保留?静态属性疑问
为什么Swift静态属性的值会在多次调用后持续保留?
代码示例
struct Foo { static var bar = 0 static func test() { Self.bar = 2 + Self.bar print(Self.bar) } }
调用结果
Foo.test() // 输出2 Foo.test() // 输出4 Foo.test() // 输出6
问题解答
这是因为Swift里用static修饰的属性属于类型本身,而非类型的某个实例。它的初始化只会执行一次——第一次访问这个属性(包括通过静态方法间接访问)时完成初始化,之后就会一直驻留在内存中,直到程序或所在模块终止。
你代码里的static var bar = 0,只会在第一次调用Foo.test()时完成初始赋值(设置为0),接下来每次调用test(),都是在这个已存在的bar值基础上做累加操作,自然会得到2、4、6这样的递进结果,而非每次都回到初始值0重新计算。
简言之,静态属性是类型级别的全局存储,所有对它的访问和修改,都是针对同一个内存地址里的同一个值,和是否创建类型实例完全无关。
内容的提问来源于stack exchange,提问作者Evgeniy Kleban
相关产品推荐
相关产品推荐

