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

大川舞子

我想用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)
        }
    }
}
安德里亚·穆尼亚尼(Andrea Mugnaini)

您不能仅使用变量来实现您要的内容,因为computed properties实例中没有任何存储空间。因此,您必须引入一个私有变量来保存值in memory

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
    }
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何更新地图中的值(如果存在),否则将其插入

如果值符合条件,则将其乘以变量;否则,将另一个变量乘以

如何返回对象(如果存在),否则返回可选的空

写入文件,但如果存在则将其覆盖

如果表中存在数字,则返回1,否则返回0

除非条目已经存在,否则将其插入crontab中(如果可能,则为单行)

插入(如果不存在),否则返回id

如果项目已经存在,则C#更新多元素列表项目,否则将其添加为新项目

如果-否则或提前返回

如果存在(Show a),则返回`show a`;否则,如果(Typeable a),则返回其类型表示

返回成员变量(如果存在)

从json返回特定值(如果存在),否则返回零行

MongoDB:检查对象数组,如果存在则返回true,否则返回false

如果值不存在,则设置为null;否则,如果存在颠簸,则返回现有值

Lodash返回键(如果存在),否则返回另一个键

如果枚举中存在值,则返回True;否则返回True。如果不是,则返回false

Postgres:如果不存在则插入,否则返回该行

如何:如果服务器上存在映像,则返回映像,否则返回我自己的映像?

php和mysqli SELECT查询(如果存在),然后对其进行更新,否则将其插入

如果记录存在则返回ID,否则插入并返回ID

如果行不存在则返回0,否则返回列值

SQL Server-使用SELECT CASE WHEN设置位变量,但如果SELECT不返回任何记录,则将其默认设置为0

如果列表中存在相同的值,则将其添加到新变量中

如果变量不存在则返回 false

如果存在则从字符串数组中删除,否则将其插入(猫鼬模式)

Swift:如果图像存在,则返回它,否则返回 nil

如果不存在则插入,否则返回值

mysql 如果存在则返回值,否则返回零(或任何要识别的东西)

如果存在,如何在 Slick 中增加一列,否则将其插入默认值?