Swift 在switch语句中使用UIColor

Swift 在switch语句中使用UIColor,swift,switch-statement,uicolor,Swift,Switch Statement,Uicolor,在我的第一个控制器中有一个对象数组,我正在传递一个数组以通过模态segue修改它。此模式视图与创建新对象和填充该对象相同 在这个模式的故事板中,我有3个文本字段和5个代表颜色的按钮。当用户单击其中一个时,我会绘制一个边框以将其标记为选中 当我加载此模式视图以修改现有对象时,我需要绘制正确按钮的边框 我有一个这样做的方法,但它需要参数中的UIButton实例。所以我想知道是否可以使用switch语句来知道对象中的颜色,并使用良好的UIButton实例调用函数 switch action?.

在我的第一个控制器中有一个对象数组,我正在传递一个数组以通过模态segue修改它。此模式视图与创建新对象和填充该对象相同

在这个模式的故事板中,我有3个文本字段和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()
    }
请提前询问您的答案

编辑:

我试图打印这个颜色实例,看看是否可以用其他方式对其进行转换以使开关工作

println("\(action?.color)")
哪张照片

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

因此,我不知道我能做什么,因为它返回不同的内容,因为
操作?的类型。color
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()
}

正如控制台中的输出所示,“color”属性是可选的。您需要:

  • 找到一种避免将其存储为可选文件的方法
  • 在switch语句之前使用可选链接和可选绑定:

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

  • 我认为错误不仅仅是因为包装的UIColor,而是因为我无法将对象放入开关。现在很好用,谢谢!