根据可选案例值切换测试非可选项

时间:2015-08-26 18:45:40

标签: swift

我知道可以测试此问题中描述的可选vs选项:Swift: testing against optional value in switch case

但我想要做的是使用可选的案例值测试非可选值:

    switch nonOptionalView{
    case optionalView1:
        // Do something

    case optionalView2:
        // Do something else

    }

Xcode返回错误"可选xxx的值未解包" 如果我添加"?"在案例陈述的最后,我得到了#34;?模式不能匹配' UIView'"

类型的值

2 个答案:

答案 0 :(得分:1)

目前,Swift标准库不支持模式匹配可选值。但是,您可以使用if / else if语句轻松执行逻辑:

if nonOptionalView === optionalView1 {
    // Do something
} else if nonOptionalView === optionalView2 {
    // Do something else
}

如果您真的希望能够模式匹配可选值,则可以使用operator overloading。要重载模式匹配运算符~=,请将以下代码放在项目中:

public func ~=<T : Equatable>(a: T?, b: T?) -> Bool {
    return a == b
}

现在,您可以很好地匹配可选值:

switch nonOptionalView {
case optionalView1:
    // Do something
case optionalView2:
    // Do something else
default:
    // Handle default case
}

答案 1 :(得分:0)

您可以查看此解决方案https://stackoverflow.com/a/26941591/2485238

我发现代码比if / else解决方案更具可读性。

在你的情况下,它将是

switch nonOptionalView {
    case .Some(optionalView1):
    // Do something

    case .Some(optionalView2):
    // Do something else

    default: 
    // Handle default case
}