2

我有以下代码:

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
    }
}

这不编译,最后一行触发了这个错误:

可选类型“字符串?”的值 未拆封;你的意思是用'!' 或者 '?'?

您如何建议在强制展开的情况下处理此问题lValuerValue

4

2 回答 2

3

要解开 case 语句中的选项,您可以使用

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

于 2017-02-04T12:35:56.120 回答
0

鉴于如果您已经了解该case let (lValue, rValue)声明,您知道它们都是 non- 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!
    }
}
于 2017-02-04T12:43:23.207 回答