【发布时间】:2024-04-20 02:00:09
【问题描述】:
我有一个class,看起来像这样:
class A {
var aString = ""
static var staticString = ""
}
如果我创建A 的instance,我将无法访问static property:
var a = A()
a.staticString = "THIS GIVES AN ERROR"
但是,如果我创建一个直接的 instance 到 static variable 它可以工作:
var a = A.staticString
a = "THIS WORKS"
我理解静态变量的方式是你应该只能像这样直接访问它们:A.staticString = "hello"。但这似乎并非如此。
(对我来说)更令人困惑的是,我可以创建多个 instances 并使用它们自己的单独值;那就是值不会保留static:
var a = A.staticString
a = "AAA"
var b = A.staticString
b = "BBB"
print(a) //prints AAA
print(b) //prints BBB
static 变量不应该...保持静态吗?在我看来,a 和 b 都应该打印 BBB,因为 b = "BBB" 应该已经覆盖了分配给它的第一个值。
为了让它更加混乱(对我来说),使用 singleton 确实给了我预期的结果:
class A {
static let shared = A()
var aString = ""
static var staticString = ""
}
let instance1 = A.shared
instance1.aString = "A String"
let instance2 = A.shared
instance2.aString = "Another String"
print(instance1.aString, instance2.aString) //Both print "Another String"
有好心人能帮我解决问题吗?
【问题讨论】:
-
变量保持静态,复制到
a和b,它们与静态变量无关,只是两个字符串变量。 -
static 与 constant (let) 不同。
标签: swift static singleton instance