You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift 4枚举元组模式匹配报错:是语言限制还是使用错误?

Swift 4枚举元组模式匹配报错问题解答

嘿,我一眼就发现问题所在了——这不是Swift 4模式匹配的限制,只是你犯了个小笔误而已!

先看你给出的代码:

enum Event { case scan case stopScanning }
enum State { case idle case scanning }
let tuple: (State, Event) = (State.idle, Event.scan)
switch(tuple) {
case (.idle, .scan): return State.scanning
case (.scan, .stopScanning): return State.idle
default: return state
}

报错提示pattern cannot match values of type 'State',核心原因是你在第二个case里把State的枚举成员写错了:State枚举定义的是case scanning,但你在匹配元组第一个元素时写的是.scan——这个成员在State里根本不存在!.scan是Event枚举的成员,可元组第一个元素是State类型,编译器自然会提示这个模式匹配不上State类型的值。

修正后的代码只需要把第二个case里的.scan改成.scanning,另外注意你代码里的return state变量未定义,我们可以调整成返回元组里的当前状态,示例如下:

enum Event { case scan case stopScanning }
enum State { case idle case scanning }

func getNextState(from tuple: (State, Event)) -> State {
    switch tuple {
    case (.idle, .scan):
        return .scanning
    case (.scanning, .stopScanning):
        return .idle
    default:
        return tuple.0
    }
}

// 测试调用
let testTuple: (State, Event) = (.idle, .scan)
print(getNextState(from: testTuple)) // 输出 scanning

这样就能正常运行了,本质就是枚举成员名称的拼写错误,和Swift 4的模式匹配能力无关~

内容的提问来源于stack exchange,提问作者Peter Lamberg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:12:14