0

我有一个像下面这样的变量

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 调用中。这是正确的方法吗?

4

1 回答 1

1

尝试通过以下方式安全地解开您的价值:

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

    print(selectedRating)
}
于 2018-03-13T12:08:42.600 回答