Обновление нескольких меток на основе выбранного представления в Swift

#ios #swift

#iOS #swift

Вопрос:

Я все еще пытаюсь освоиться с Swift, и сейчас я пытаюсь понять, как реализовать что-то, что больше похоже на Swift:

Допустим, у меня есть представление, которое содержит 7 кнопок, представляющих дни недели, и 4 метки. В зависимости от выбранного дня эти 4 метки будут обновляться с разными данными и иметь разные цвета.

Например, я хочу избежать чего-то подобного этому повторяющемуся коду, чтобы иметь метод на каждый день:

    func updateMondayView() {
    label1.text = value1
    label1.textColor = value1 < 0 ? UIColor.red() : UIColor.green()
    .................................................................
    label2.text = value2
    label2.textColor = value2 < 0 ? UIColor.red() : UIColor.green()
}
  

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

Что об этом думает сообщество ? Есть предложения?

Комментарии:

1. Это зависит от вашей реализации, стоит ли это делать или нет, но всякий раз, когда я вижу такие вещи label1 , как label2 , и т.д. Я предпочитаю помещать их в массив.

Ответ №1:

Что я обычно делаю в этой ситуации, так это прикрепляю кнопки из раскадровки к одной функции. Затем установите атрибут тега для каждой кнопки (1 для понедельника, 2 для вторника и т. Д. Будет иметь смысл). Затем в функции вы можете переключить атрибут тега кнопки.

Функция будет выглядеть примерно так:

 @IBAction func updateDayView(sender: UIButton) {

    switch sender.tag {

        case 1: 
            label1.text = value1
            label1.textColor = value1 < 0 ? UIColor.red() : UIColor.green()
            label2.text = value2
            label2.textColor = value2 < 0 ? UIColor.red() : UIColor.green()
        case 2:
            etc
        default: break

    }
  

}

Ответ №2:

Для наименее повторяющегося кода я предпочитаю использовать идею Оливье (прикрепление функции из раскадровки к одной функции и использование тегов) и расширение.

Вы можете добавить расширение для таких меток:

 extension UILabel
{
  func foo(value1: String, value2: Int)
  {
    self.text = value1
    self.textColor = value2 < 0 ? UIColor.red : UIColor.green
  }
}
  

и используйте его в своей функции:

 @IBAction func updateDayView(sender: UIButton) {

  switch sender.tag {

  case 1:
    label1.foo(value1: "label1", value2: 10)
    label2.foo(value1: "label2", value2: 15)
  case 2:
    label1.foo(value1: "label11", value2: 20)
    label2.foo(value1: "label22", value2: 25)
  default: break

  }
}