Изменяемая переменная в классе не обновляется - PullRequest
0 голосов
/ 22 июня 2019

У меня есть такой класс:

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, и множество экземпляров (сотни), поэтому я пытаюсь упростить это.

Ответы [ 2 ]

0 голосов
/ 22 июня 2019

Вы также можете определить 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 - если вы хотите иметь возможность свободно переключаться между ними.(В качестве альтернативы, если это ваша проблема в буквальном смысле, вы можете определить только метрический вес, а затем вычислять имперский вес всякий раз, когда он запрашивается.)

0 голосов
/ 22 июня 2019

Вам необходимо либо прослушать metric и соответственно изменить свою модель, либо использовать вычисленное свойство, подобное этому, чтобы получить weight в зависимости от текущего значения глобальной переменной

var weight: String {
   return metric ? "1kg" : "2.2 lbs"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...