我有一个名为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
。它为什么会产生错误?
答案 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
}
希望它有用