Установите значение bool, используя объект модели didSet - PullRequest
2 голосов
/ 20 марта 2019

Я пытаюсь понять, как правильно установить значения bool, используя didSet объекта модели. Мое приложение имеет серию сменных карт, где некоторые переворачивают, а некоторые нет. Ниже приведен код CardView, который запускается для каждой созданной карты.

В настоящее время код отлично работает для изображения и метки - каждая карта загружает уникальную информацию на основе объекта модели каждой карты. Однако, кнопка и свойство isFlippable находятся там, где я борюсь.

Код сейчас всегда загружает зеленый путь. Странная вещь, однако, в том, что даже когда cardModel должен установить для кнопки isEnabled значение false, он все равно будет загружать зеленый (но кнопка не будет работать, поэтому она стала отключенной ...)

var cardModel: CardModel! {
   didSet {
      imageView.image = cardModel.image
      label.text = cardModel.label
      flipButton.isEnabled = cardModel.isFlippable
      isBackShowing = cardModel.isFlippable //Intentionally use isFlippable here because I want the initial layout to be based on this true or false value.
   }
}


let imageView = UIImageView()
let label = UILabel()
let flipButton = UIButton()
var isBackShowing = false

override init(frame: CGRect) {
    super.init(frame: frame)
    setupLayout()
}

fileprivate func setupLayout() {

    if flipButton.isEnabled == true {
        if isBackShowing == true {
            backgroundColor = .red
        } else {
            backgroundColor = .green
        }
    } else {
        backgroundColor = .yellow
    }
}

У меня также есть код, когда кнопка переворачивается, который чередует «isBackShowing», а затем вызывает setupLayout () - он работает нормально. Но он всегда загружается как ложный во время начальной настройки карты.

1 Ответ

1 голос
/ 20 марта 2019

Для лучшей читабельности вы можете немного обновить свой код, заменив var isBackShowing = Bool() на var isBackShowing = false.

А также вы можете позвонить setupLayout(), чтобы обновить макет после установки cardModel. Например, didSet из cardModel может выглядеть так:

var cardModel: CardModel! {
   didSet {
      imageView.image = cardModel.image
      label.text = cardModel.label
      flipButton.isEnabled = cardModel.isFlippable
      isBackShowing = cardModel.isFlippable
      setupLayout()
   }
}
...