2015-10-25 3 views
0

Я нахожусь в процессе обучения Swift, я экспериментировал с Optional разворачивания и наткнулся на эту ситуацию:Сжатых Дополнительные разворачивания

let displayText: String? 

if let item = displayText { 
    if let value = Double(item) { 
     print("\(value)") 
    } else { 
     print("Didn't happen") 
    } 
} else { 
    print("Didn't happen") 
} 

Кажется, что-то подобное может быть возможным:

let displayText: String? 

if let item = Double(displayText) { 
    print("\(item)") 
} else { 
    print("Didn't happen") 
} 

В моем случае displayText может быть nil, поэтому развертывание силы - это не то, что я хочу. Я знаю, что могу скрыть это в функции, чтобы сделать ее более кратким, но мне действительно интересно, есть ли другие варианты.
Есть ли способ сделать это более кратким?

ответ

2

Несколько возможностей:

# 1: Генеральный. Вы можете поместить несколько разворачивающихся объявлений переменных в одну строку.

if let item = displayText, value = Double(item) { 
    print("\(value)") 
} 

# 2: The Hack. В вашем конкретном случае, вы можете также по умолчанию пустой необязательным то, что вы знаете, не будет действительным строчным представлением Double:

if let value = Double(item ?? "") { 
    print("\(value)") 
} 
+0

Отлично, что я искал, спасибо! – Brad

0

Другая возможность заключается в использовании map на OPTIONALS:

if let value = displayText.map({ Double($0) }) { 
    print("\(value)") 
} 
+0

Не знаю, о карте, интересной, придется больше почитать об этом. – Brad

Смежные вопросы