我仍在尝试用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()
}
在我的脑海中,我正在考虑使用类似于日期和日期的枚举来将值和颜色作为参数。
社区对此有何看法?有什么建议 ?
答案 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
}
}