我有一个这样的班级:
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
是我全局设置的变量,根据用户设置更改为true
或false
。
问题在于,即使metric
发生了变化,除非重新启动应用程序,weight
都不会更新。
我在做什么错了?
此外,我有很多属性,例如weight
和很多实例(数百个),因此我试图使其变得简单。
答案 0 :(得分:0)
您需要听metric
并相应地更改模型,或者使用像这样的计算属性来获取weight
,具体取决于全局变量的最新值
var weight: String {
return metric ? "1kg" : "2.2 lbs"
}
答案 1 :(得分:0)
您还可以定义一个Weight
结构,该结构根据查询返回metric
或imperial
。
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
如果要能够在两个值之间自由切换,则需要同时设置两个值-metric
和imperial
。 (或者,如果从字面上看这是您的问题,则可以仅定义公制重量,然后在需要时计算英制重量。)