首页 > 解决方案 > 类级变量集总是为零,为什么?

问题描述

尝试将任何字符串分配给类级别变量时,我总是得到 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")
        }
    }
}

标签: iosswiftgetter-setteruserdefaults

解决方案


在settertest内部调用时,会调用getter来获取 的值。此时,“test”的值在 UserDefaults 中。因此,您应该使用要设置给变量的值,而不是 storage 。testniltestnewValue

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 的工作方式。


推荐阅读