Ios 类级别变量集始终为零为什么?
当尝试将任何字符串分配给类级别变量时,我总是得到nilIos 类级别变量集始终为零为什么?,ios,swift,getter-setter,userdefaults,Ios,Swift,Getter Setter,Userdefaults,当尝试将任何字符串分配给类级别变量时,我总是得到nil class Demo { class var test: String? { set { UserDefaults.standard.set(newValue, forKey: "test") print("test = \(test)") } get { return UserDefaults.standard
class Demo {
class var test: String? {
set {
UserDefaults.standard.set(newValue, forKey: "test")
print("test = \(test)")
}
get {
return UserDefaults.standard.string(forKey: "test")
}
}
}
下面是我的控制台输出:
//测试=零
//Demo.test=nil
在setter内部调用test时,将调用getter以获取test的值。此时,UserDefaults内的test值为nil。因此,您应该使用newValue,而不是存储test,newValue是您将要设置为变量的值
class Demo {
class var test: String? {
set {
UserDefaults.standard.set(newValue, forKey: "test")
print("test = \(test)")
}
get {
return UserDefaults.standard.string(forKey: "test")
}
}
}
从文件来看
如果计算属性的setter未定义新属性的名称
要设置的值,将使用默认名称newValue
查看中的ComputedProperties部分,了解getter和setter是如何工作的。在setter内部调用test时,会调用getter以获取test的值。此时,UserDefaults内的test值为nil。因此,您应该使用newValue,而不是存储test,newValue是您将要设置为变量的值
class Demo {
class var test: String? {
set {
UserDefaults.standard.set(newValue, forKey: "test")
print("test = \(test)")
}
get {
return UserDefaults.standard.string(forKey: "test")
}
}
}
从文件来看
如果计算属性的setter未定义新属性的名称
要设置的值,将使用默认名称newValue
查看中的ComputedProperties部分,了解getter和setter是如何工作的。代码使用test访问传递给setter的值。使用test访问getter,getter返回nil
要使用提供给setter的值,请使用编译器生成的变量newValue
或者,您可以声明所使用的变量名
class Demo {
class var test: String? {
set(newTestValue) {
print("test = \(newTestValue)")
UserDefaults.standard.set(newTestValue, forKey: "test")
}
get {
return UserDefaults.standard.string(forKey: "test")
}
}
}
有关第一个示例,请参见。关于第二个问题,请参见
代码使用test访问传递给setter的值。使用test访问getter,getter返回nil
要使用提供给setter的值,请使用编译器生成的变量newValue
或者,您可以声明所使用的变量名
class Demo {
class var test: String? {
set(newTestValue) {
print("test = \(newTestValue)")
UserDefaults.standard.set(newTestValue, forKey: "test")
}
get {
return UserDefaults.standard.string(forKey: "test")
}
}
}
有关第一个示例,请参见。关于第二个问题,请参见
我已经按照您的建议编辑了我的问题,请检查。@user3686123请仔细阅读答案。不要用答案编辑问题。我已经按照你的建议编辑了我的问题,请检查。@user3686123请仔细阅读答案。不要用答案编辑问题。