尝试检查枚举类型失败

时间:2018-03-20 13:55:26

标签: ios swift

我有一个名为PinpadModelCallback的枚举,声明如下:

enum PinpadModelCallback {
    case Connecting
    case SelectDevice
    case DevicesUpdated
    case Configuring
    case Stopping
    case Stopped
    case CardWaiting
    case TerminalProcessing
    case TransactionStarted
    case SignatureRequest
    case ApplicationSelection
    case TransactionSuccess(result: LTransactionResult)
    case TransactionError(msg: String)
    case AuthError(msg: String)
}

我有一个函数,我将枚举类型作为参数传递并尝试检查它:

private func setInstuction(_ msg: String, callback: PinpadModel.PinpadModelCallback? = nil) {
        guard let callback = callback else { return }
        if callback == .Connecting {

        }

以下代码产生错误:

  

Binary operator '==' cannot be applied to operands of type 'PinpadModel.PinpadModelCallback' and '_'

适用于开关案例:

  switch callback {
    case .Connecting:
        break
    default:
        break
    }

但我想使用if else。它为什么会产生错误?

2 个答案:

答案 0 :(得分:2)

正如错误消息所示,问题是==。您不能在枚举上使用equals比较,该枚举具有任何案例的关联值。这样的枚举不是Equatable。您的枚举具有最后三个案例的关联值。

删除关联的值,或采用Equatable并自己定义==,或使用其他表达方式。

这将在Swift 4.1中更改,您可以在其中声明您的枚举Equatable并获得==的自动生成定义。您可以通过下载Xcode 9.3 beta来试用它。

答案 1 :(得分:1)

您可以将related_company.allow_tags = True用于此

喜欢

if case

你也可以获得变量的枚举

if case .Connecting = callback { 
    // True
} else {
   // false
}

希望它有用