我知道可以测试此问题中描述的可选vs选项:Swift: testing against optional value in switch case
但我想要做的是使用可选的案例值测试非可选值:
switch nonOptionalView{
case optionalView1:
// Do something
case optionalView2:
// Do something else
}
Xcode返回错误"可选xxx的值未解包" 如果我添加"?"在案例陈述的最后,我得到了#34;?模式不能匹配' UIView'"
类型的值答案 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
}