2017-02-04 51 views
2

我有下面的代码:如何处理自选switch语句中

for compareValues in [(optionalVal1, optionalVal2), (optionalVal3, optionalVal4)] { 
    switch compareValues { 
    case (nil, nil): 
     break 
    case (_, nil): 
     return true 
    case (nil, _): 
     return false 
    case let (lValue, rValue): 
     return lValue < rValue 
    } 
} 

这并不编译,最后一行触发此错误:

Value of optional type 'String?' not unwrapped; did you mean to use '!' or '?'?

你会如何建议处理这个没有被迫展开lValuerValue

+4

为什么不强制解包?只有4个案件,所有'零'案件已经被覆盖。 – vadian

回答

2

解开了自选的case语句,你可以使用

case let (.some(lValue), .some(rValue)):

+2

是的,或'情况下让(左值?右值?)'。 – Rob

0

假设,如果你已经得到下降到case let (lValue, rValue)说法,你知道他们都是非nil,你可以安全地强制解包他们在这一点上:

for compareValues in values { 
    switch compareValues { 
    case (nil, nil): 
     break 
    case (_, nil): 
     return true 
    case (nil, _): 
     return false 
    case let (lValue, rValue): 
     return lValue! < rValue! 
    } 
}