Кратко Незадължително разопаковане

В процес съм на изучаване на 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 на Optionals:

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