2017-02-04 4 views
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 
    } 
} 

Это не компилируется, последняя строка вызывает эту ошибку:

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

Как вы могли бы предложить обработку этой без принудительная разворачивание lValue и rValue?

+4

Почему бы не принудительно развернуть? Есть только 4 случая, и все случаи «nil» уже покрыты. – vadian

ответ

2

разворачивать УСТРОЙСТВА в случае заявления, вы можете использовать

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

+2

Да, или 'case let (lValue ?, rValue?)'. – 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! 
    } 
} 
Смежные вопросы