Swift 二进制运算符'~=';不能应用于两个UmRet操作数

Swift 二进制运算符'~=';不能应用于两个UmRet操作数,swift,switch-statement,Swift,Switch Statement,我正在努力将IDTech swiper集成到我的应用程序中,我已经取得了很大进展,添加了库,注册了通知,注销了通知,现在我正在开发一个连接阅读器的函数。当我试图根据返回值切换案例时,我似乎无法找出我在这里做错了什么。。谁能帮帮我吗 func displayUmRet(operation: String, returnValue: UmRet) { var string = "" do { switch returnValue { ca

我正在努力将IDTech swiper集成到我的应用程序中,我已经取得了很大进展,添加了库,注册了通知,注销了通知,现在我正在开发一个连接阅读器的函数。当我试图根据返回值切换案例时,我似乎无法找出我在这里做错了什么。。谁能帮帮我吗

func displayUmRet(operation: String, returnValue: UmRet) {

        var string = ""

    do {
        switch returnValue {

        case UMRET_SUCCESS: string = ""
        case UMRET_NO_READER: string="No reader attached"
        case UMRET_SDK_BUSY: string="Communication with reader in progress"
        case UMRET_MONO_AUDIO: string="Mono audio enabled"
            case UMRET_ALREADY_CONNECTED: string="Already connected"
            case UMRET_LOW_VOLUME: string="Low volume"
            case UMRET_NOT_CONNECTED: string="Not connected"
            case UMRET_NOT_APPLICABLE: string="Not applicable to reader type"
            case UMRET_INVALID_ARG: string="Invalid argument"
            case UMRET_UF_INVALID_STR: string="Invalid firmware update string"
            case UMRET_UF_NO_FILE: string="Firmware file not found"
            case UMRET_UF_INVALID_FILE: string="Invalid firmware file"
            default: string="<unknown code>"
        }
    } while (0)

   // var retStatus = UMRET_SUCCESS==ret

    //self.textResponse.text = "\(operation), \(retStatus), \(string)"

    self.hexResponse.text = "";


}
func displayUmRet(操作:字符串,返回值:UmRet){
var string=“”
做{
开关返回值{
案例UMRET_成功:string=“”
case UMRET\u NO\u READER:string=“未连接读取器”
case UMRET_SDK_BUSY:string=“正在与读卡器通信”
案例UMRET\u MONO\u AUDIO:string=“MONO AUDIO enabled”
案例UMRET\u已连接:string=“已连接”
案例UMRET\u LOW\u VOLUME:string=“LOW VOLUME”
案例UMRET\u未连接:string=“未连接”
case UMRET\u不适用:string=“不适用于读卡器类型”
case UMRET\u无效参数:string=“无效参数”
案例UMRET\u UF\u无效\u STR:string=“无效固件更新字符串”
case UMRET_UF_NO_FILE:string=“未找到固件文件”
案例UMRET\u UF\u无效\u文件:string=“无效固件文件”
默认值:string=“”
}
}而(0)
//var retStatus=UMRET\u SUCCESS==ret
//self.textResponse.text=“\(操作),\(返回状态),\(字符串)”
self.hexResponse.text=“”;
}

您需要在您的案例前放置一个

enum UmRet {
  case UMRET_SUCCESS, UMRET_FAILURE
}

var string = " "

let returnValue = UmRet.UMRET_SUCCESS

switch returnValue {
case .UMRET_SUCCESS: string = "y"
case .UMRET_FAILURE: string = "n"
}
另外,
0
与Swift中的
false
不同,因此:

do {
...
} while (0)
也不应该起作用

行的末尾不需要分号,因此:

self.hexResponse.text = "";
可以这样说:

self.hexResponse.text = ""
最后,如果switch语句对枚举中的每个事例都有事例,则不需要默认事例。(这就是我的示例中没有的原因)

顺便说一下,
~=
只是模式匹配函数的运算符,Swift在switch语句中就是这样做的。它的工作原理有点像
=
函数,例如,
Int~=Int
Int==Int
相同。但是它的功能更为广泛:例如
Range~=Int
,例如
0…3~=2
返回
Int
是否在范围内。(在本例中也是如此)对于枚举,它将案例与案例进行匹配。在我的示例中,它将匹配
UMRET\u SUCCESS
,并且
string
将设置为
y