Class level 变量设置总是 nil 为什么?
Class level variable set always nil why?
尝试将任何字符串分配给 class 级别变量时,我总是得到 nil。
下面是我的控制台输出:
// test = nil
// Demo.test = nil
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
Demo.test = "app"
print("Demo.test = \(Demo.test)")
}
}
class Demo {
class var test: String? {
set {
UserDefaults.standard.set(test, forKey: "test")
print("test = \(test)")
}
get {
return UserDefaults.standard.string(forKey: "test")
}
}
}
当您在 setter 中调用 test
时,调用 getter获取 test
的值。此时,"test" 的值在 UserDefaults 中是 nil
。因此,您应该使用 newValue
而不是存储 test
,这是您要设置给变量的值。
class Demo {
class var test: String? {
set {
UserDefaults.standard.set(newValue, forKey: "test")
print("test = \(test)")
}
get {
return UserDefaults.standard.string(forKey: "test")
}
}
}
来自文档,
If a computed property’s setter does not define a name for the new
value to be set, a default name of newValue
is used.
查看 Properties 中的 ComputedProperties 部分以了解 getter 和 setter 的工作原理。
代码使用 test
访问传递给 setter 的值。使用 test
访问 getter,其中 returns nil
.
要使用提供给 setter 的值,请使用编译器生成的变量 newValue
。
class Demo {
class var test: String? {
set {
print("test = \(newValue)")
UserDefaults.standard.set(newValue, forKey: "test")
}
get {
return UserDefaults.standard.string(forKey: "test")
}
}
}
或者您可以声明使用的变量名。
class Demo {
class var test: String? {
set(newTestValue) {
print("test = \(newTestValue)")
UserDefaults.standard.set(newTestValue, forKey: "test")
}
get {
return UserDefaults.standard.string(forKey: "test")
}
}
}
第一个示例参见 Computed Properties, Shorthand Setter Declaration. For the second one see Computed Properties。
https://docs.swift.org/swift-book/LanguageGuide/Properties.html
尝试将任何字符串分配给 class 级别变量时,我总是得到 nil。
下面是我的控制台输出:
// test = nil
// Demo.test = nil
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
Demo.test = "app"
print("Demo.test = \(Demo.test)")
}
}
class Demo {
class var test: String? {
set {
UserDefaults.standard.set(test, forKey: "test")
print("test = \(test)")
}
get {
return UserDefaults.standard.string(forKey: "test")
}
}
}
当您在 setter 中调用 test
时,调用 getter获取 test
的值。此时,"test" 的值在 UserDefaults 中是 nil
。因此,您应该使用 newValue
而不是存储 test
,这是您要设置给变量的值。
class Demo {
class var test: String? {
set {
UserDefaults.standard.set(newValue, forKey: "test")
print("test = \(test)")
}
get {
return UserDefaults.standard.string(forKey: "test")
}
}
}
来自文档,
If a computed property’s setter does not define a name for the new value to be set, a default name of
newValue
is used.
查看 Properties 中的 ComputedProperties 部分以了解 getter 和 setter 的工作原理。
代码使用 test
访问传递给 setter 的值。使用 test
访问 getter,其中 returns nil
.
要使用提供给 setter 的值,请使用编译器生成的变量 newValue
。
class Demo {
class var test: String? {
set {
print("test = \(newValue)")
UserDefaults.standard.set(newValue, forKey: "test")
}
get {
return UserDefaults.standard.string(forKey: "test")
}
}
}
或者您可以声明使用的变量名。
class Demo {
class var test: String? {
set(newTestValue) {
print("test = \(newTestValue)")
UserDefaults.standard.set(newTestValue, forKey: "test")
}
get {
return UserDefaults.standard.string(forKey: "test")
}
}
}
第一个示例参见 Computed Properties, Shorthand Setter Declaration. For the second one see Computed Properties。
https://docs.swift.org/swift-book/LanguageGuide/Properties.html