ios - 类级变量集总是为零,为什么?
问题描述
尝试将任何字符串分配给类级别变量时,我总是得到 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")
}
}
}
解决方案
在settertest
内部调用时,会调用getter来获取 的值。此时,“test”的值在 UserDefaults 中。因此,您应该使用要设置给变量的值,而不是 storage 。test
nil
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")
}
}
}
从文档中,
如果计算属性的设置器没有为要设置的新值定义名称,
newValue
则使用默认名称。
检查属性中的 ComputedProperties 部分以了解 getter 和 setter 的工作方式。
推荐阅读
- java - JdbcBatchItemWriter 如何决定批量大小?
- css - 如何删除文本输入css上的蓝色背景
- php - Unicode 代码点转义语法
- html - 如何水平堆叠div?
- python - 无法在 Catalina、Macbook Pro (2017) 上下载 Python 3.7、64 位图形
- gradle - Gradle 多项目并行构建消耗 100% 的 CPU 时间
- javascript - 如何根据jQuery中另一个字段中的日期获取星期几
- android - 移除 onActivityResult 中的当前片段
- sql-server - 按日期排序很慢
- r - R:通过每次加1来完成下面的单元格