Краткая дополнительная развертка

Я изучаю 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, поэтому принудительное развертывание — это не то, что я хочу делать. Я знаю, что мог бы скрыть это в функции, чтобы сделать его более кратким, но мне действительно любопытно, есть ли другие варианты.
Можно ли как-то сделать это более кратким?


person Brad    schedule 25.10.2015    source источник


Ответы (2)


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

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

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

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

if let value = Double(item ?? "") {
    print("\(value)")
}
person The Paramagnetic Croissant    schedule 25.10.2015

Другая возможность — использовать map для опционов:

if let value = displayText.map({ Double($0) }) {
    print("\(value)")
}
person Kametrixom    schedule 25.10.2015
comment
Не знал о карте, интересно, надо будет прочитать больше об этом. - person Brad; 25.10.2015