Компилятор Swift часто дает сбой с несколькими (> = 2) падежами переключений и одним и тем же именованным связанным значением.Следующий код не компилируется для Swift версии 4.2:
enum Foo { case a(count: Int) case b(count: Int) case c(count: Int) case d } func bar(v: Foo) { switch v { case .a(let count): fallthrough case .b(let count): fallthrough case .c(let count): print(count) case .d: break } } bar(v: .a(count: 4))
Отчет об ошибке, отправленный по адресу: https://bugs.swift.org/browse/SR-9729
Я не уверен, разрешает ли Swift fallthrough со значением привязки.
fallthrough
Но это, безусловно, работает:
func bar(v: Foo) { switch v { case .a(let count), .b(let count), .c(let count): print(count) case .d: break } }
Временное решение:
enum Foo { case a(count: Int) case b(count: Int) case c(count: Int) case d var count: Int { if case .a(let count) = self { return count } else if case .b(let count) = self { return count } else if case .c(let count) = self { return count } else { fatalError() } } } func bar(v: Foo) { switch v { case .a: fallthrough case .b: fallthrough case .c: print(v.count) case .d: break } } bar(v: .a(count: 4))