You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 11:47:02