班级变量总是为零?

use*_*123 1 getter-setter ios swift userdefaults

在尝试将任何字符串分配给类级变量时,我总是变为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")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Rak*_*tri 5

当你调用test内部二传手,将吸气剂被称为获得的价值test.此时,"test"的值nil在UserDefaults中.因此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")
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

从文档中,

如果计算属性的setter没有为要设置的新值定义名称,newValue则使用默认名称.

检查" 属性"中的"ComputedProperties"部分,了解getter和setter的工作方式.

  • @ user3686123请仔细阅读答案.并且不要用答案编辑问题. (4认同)