似乎 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
}

产生错误:

error: pattern cannot match values of type 'State'
        case (.scan, .stopScanning): State.idle
              ~^~~~

(写完问题后我立即看到了它...谢谢SO成为我的橡皮鸭。🦆 我正在回答我自己的问题,希望为他们节省一点时间,如果他们收到这个错误并且没有立即理解它在说什么并有一天从谷歌登陆这里。

第二种情况需要有.scanning(State(而不是.scan(Event(

以下作品:

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

回想起来,Swift 编译器清楚地告诉我,第二种情况在元组的第一位置具有不兼容的枚举值。

最新更新