如果存在变量,则返回它,否则加载并返回它

时间:2017-12-13 03:42:31

标签: swift

我想用settar和getter做下面的事情:

  • 如果变量已经在内存中,则将其返回。
  • 如果变量未加载,请加载并返回。

你能简单地写一下吗?

// Error code
class Person : NSObject {
    let personId : String
    init(personId: String) {
        self.personId = personId
    }
    public var name : String? {
        // The key is not static. It is decided dynamically.
        let keyName = "name-" + self.personId
        get {
            // If `name` exists, return it.
            if name != nil { return name }
            // Else load from `UserDefaults`
            return UserDefaults.standard.string(forKey: keyName)
        }
        set {
            name = UserDefaults.standard.set(newValue, forKey: keyName)
        }
    }
}

1 个答案:

答案 0 :(得分:3)

由于computed properties实例中没有任何存储空间,因此无法实现仅使用变量的要求。因此,您必须引入一个私有变量来保存值class Person : NSObject { public let personId : String private var _name: String? init(personId: String) { self.personId = personId } public var name : String? { get { let keyName = "name-" + self.personId return _name != nil ? _name : UserDefaults.standard.string(forKey: keyName) } set { let keyName = "name-" + self.personId UserDefaults.standard.set(newValue, forKey: keyName) _name = newValue } } }

reified