#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
}
}