如何处理 switch 语句中的选项
How to handle optionals in switch statements
我有以下代码:
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 '?'?
你建议如何处理这个而不用强制展开lValue
和rValue
?
要解包 case 语句中的可选值,您可以使用
case let (.some(lValue), .some(rValue)):
鉴于如果您已经深入了解 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!
}
}
我有以下代码:
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 '?'?
你建议如何处理这个而不用强制展开lValue
和rValue
?
要解包 case 语句中的可选值,您可以使用
case let (.some(lValue), .some(rValue)):
鉴于如果您已经深入了解 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!
}
}