API调用swift中的可选变量

时间:2018-03-13 11:48:19

标签: swift enums optional-variables

我有一个如下变量

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?'没有打开;你的意思是使用'!'或'?'?"在API调用中传递selectedRating。我该如何解决这个问题?

在API调用中,

让sessionRating:Int

被声明如上,我现在改为

让sessionRating:Int?

启用

的传递
 let selectedRating = faces
          .map({ $0.face })
          .filter({ $0.isSelected })
          .first?.icon.rawValue ?? nil 
API调用中的

。这是正确的方法吗?

1 个答案:

答案 0 :(得分:1)

尝试使用以下方法安全地展开您的价值:

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

    print(selectedRating)
}