Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 类级别变量集始终为零为什么?_Ios_Swift_Getter Setter_Userdefaults - Fatal编程技术网

Ios 类级别变量集始终为零为什么?

Ios 类级别变量集始终为零为什么?,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

当尝试将任何字符串分配给类级别变量时,我总是得到nil

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请仔细阅读答案。不要用答案编辑问题。