类中的可变变量未更新

时间:2019-06-22 15:58:34

标签: swift

我有一个这样的班级:

class Animal = {
  var name: String
  var weight: String

  init(name: String, weight: String)

  self.name = name
  self.weight = weight
}

以及类似的实例:

let cat = Animal(
  name: "Cat",
  weight: metric ? "1kg" : "2.2 lbs"
)

metric是我全局设置的变量,根据用户设置更改为truefalse

问题在于,即使metric发生了变化,除非重新启动应用程序,weight都不会更新。

我在做什么错了?

此外,我有很多属性,例如weight和很多实例(数百个),因此我试图使其变得简单。

2 个答案:

答案 0 :(得分:0)

您需要听metric并相应地更改模型,或者使用像这样的计算属性来获取weight,具体取决于全局变量的最新值

var weight: String {
   return metric ? "1kg" : "2.2 lbs"
}

答案 1 :(得分:0)

您还可以定义一个Weight结构,该结构根据查询返回metricimperial

struct Weight {
    metric: String
    imperial: String
    init(_ metric: String, _ imperial: String) {
        self.metric = metric
        self.imperial = imperial
    }
}

然后,当您定义Animal时:

let cat = Animal(
  name: "Cat",
  weight: Weight("1kg", "2.2 lbs")
)

然后,当您询问体重时:

let weight = metric ? cat.weight.metric : cat.weight.imperial

如果要能够在两个值之间自由切换,则需要同时设置两个值-metricimperial。 (或者,如果从字面上看这是您的问题,则可以仅定义公制重量,然后在需要时计算英制重量。)