在switch语句中使用UIColor

时间:2015-03-25 14:52:25

标签: swift switch-statement uicolor

我的第一个控制器中有一个对象数组,我通过模态segue修改它。此模态视图与创建新对象并填充它相同。

在这个模态的故事板中,我有3个TextField和5个代表颜色的按钮。当用户点击其中一个时,我绘制一个边框以将其标记为已选中。

当我加载此模态视图以修改现有对象时,我需要绘制正确按钮的边框。

我有一个方法,但它需要参数中的UIButton实例。所以我想知道是否可以使用switch语句来了解我的对象中的颜色,并使用良好的UIButton实例调用该函数。

    switch action?.color {
        case UIColor.redColor(): setBorderColor(rougeButton)
        case UIColor.blueColor(): setBorderColor(bleuButton)
        case UIColor.yellowColor(): setBorderColor(jauneButton)
        case UIColor.greenColor(): setBorderColor(vertButton)
        case UIColor.whiteColor(): setBorderColor(blancButton)
        default:
            setBorderColor(blancButton)
            action?.color = UIColor.whiteColor()
    }

Thansk提前回答你的问题!

编辑:

我尝试打印这个颜色实例,看看我是否可以通过其他方式对其进行转换以使切换工作。

println("\(action?.color)")

打印

Optional(UIDeviceWhiteColorSpace 1 1) // UIColor.whiteColor()
Optional(UIDeviceRGBColorSpace 1 0 0 1) // UIColor.redColor()

所以我不知道我能做什么,因为它会返回不同的东西

2 个答案:

答案 0 :(得分:2)

正如控制台中的输出所示,“颜色”'属性是可选的。你需要:

  1. 找一种避免将其存储为可选项的方法
  2. 在switch语句之前使用Optional Chaining和Optional Binding:

    if let colorUnwrapped = action?.color {
    switch colorUnwrapped {
       //etc
    

答案 1 :(得分:0)

由于action?.color的类型为UIColor?Optional<UIColor>),您必须打开它:

if let actionColor = action?.color {
    switch actionColor {
    case UIColor.redColor(): setBorderColor(rougeButton)
    case UIColor.blueColor(): setBorderColor(bleuButton)
    case UIColor.yellowColor(): setBorderColor(jauneButton)
    case UIColor.greenColor(): setBorderColor(vertButton)
    case UIColor.whiteColor(): setBorderColor(blancButton)
    default:
        setBorderColor(blancButton)
        action?.color = UIColor.whiteColor()
    }
}
else {
    setBorderColor(blancButton)
    action?.color = UIColor.whiteColor()
}

或使用枚举案例模式:

switch action?.color {
case .Some(UIColor.redColor()): setBorderColor(rougeButton)
case .Some(UIColor.blueColor()): setBorderColor(bleuButton)
case .Some(UIColor.yellowColor()): setBorderColor(jauneButton)
case .Some(UIColor.greenColor()): setBorderColor(vertButton)
case .Some(UIColor.whiteColor()): setBorderColor(blancButton)
default:
    setBorderColor(blancButton)
    action?.color = UIColor.whiteColor()
}