如何处理 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 '?'?

你建议如何处理这个而不用强制展开lValuerValue

要解包 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!
    }
}