在Swift

时间:2016-10-05 19:19:27

标签: 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()
}

在我的脑海中,我正在考虑使用类似于日期和日期的枚举来将值和颜色作为参数。

社区对此有何看法?有什么建议 ?

2 个答案:

答案 0 :(得分:2)

在这种情况下我通常做的是将故事板中的按钮附加到一个功能。然后在每个按钮上设置标签属性(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

    }

}

答案 1 :(得分:1)

对于最不重复的代码,我更喜欢使用Olivier的想法(将故事板中的功能附加到一个功能并使用标签)和扩展名。

您可以为这样的标签添加扩展程序:

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

  }
}