Необязательные переменные в вызове API swift

У меня есть переменная, как показано ниже

let faces: [(face: Smiley, label: UILabel)] = [
    (Smiley(icon: .worse), UILabel()),
    (Smiley(icon: .bad), UILabel()),
    (Smiley(icon: .ok), UILabel()),
    (Smiley(icon: .good), UILabel()),
    (Smiley(icon: .amazing), UILabel())
]

с

class Smiley: UIButton {

enum Icon: Int {
    case worse = -2, bad = -1, ok = 0, good = 1, amazing = 2
}

}

Я хочу передать значение лиц вызову API, только если он выбран, поэтому у меня есть код ниже

 let selectedRating = faces
        .map({ $0.face })
        .filter({ $0.isSelected })
        .first?.icon.rawValue ?? 1 // Using default value of 1 

и selectedRating был передан вызову API. Но теперь условие изменилось, вы можете вызывать API даже без выбора лица, поэтому значение по умолчанию 1 не требуется. Как я могу пройти тогда?

если я попробую с кодом ниже: -

let selectedRating = faces
         .map({ $0.face })
         .filter({ $0.isSelected })
         .first?.icon.rawValue

Я получаю сообщение об ошибке "Значение необязательного типа" Int? не развернуто; вы хотели использовать '!' или же '?'?" при передаче selectedRating в вызове API. Как я могу это решить?

В вызове API

пусть sessionRating: Int

был объявлен, как указано выше, и теперь я изменился на

let sessionRating: Int?

чтобы обеспечить прохождение

 let selectedRating = faces
          .map({ $0.face })
          .filter({ $0.isSelected })
          .first?.icon.rawValue ?? nil 

в вызове API. Это правильный путь?


person j.krissa    schedule 13.03.2018    source источник
comment
Возможный дубликат Swift 2: !,? - Значение необязательного типа... не развернуто   -  person Tamás Sengel    schedule 13.03.2018


Ответы (1)


попробуйте безопасно развернуть ваше значение с помощью:

// If there is a selected button.
if let selectedRating = faces
    .map({ $0.face })
    .filter({ $0.isSelected })
    .first?.icon.rawValue {

    print(selectedRating)
}
person omaestra    schedule 13.03.2018
comment
Что, если я не выбрал ни одно лицо, я не могу передать selectedRating, как вы упомянули, для вызова API. - person j.krissa; 13.03.2018
comment
Тогда вы правы, добавляя ?? ноль в конце. Таким образом, selectedRating будет равен ‹nil›, если рейтинг не выбран. Просто обработайте значение ‹nil› в вызове API. - person omaestra; 13.03.2018