Быстрая компиляция нескольких падежей переключения и одноименного связанного значения нестабильна и часто дает сбой - PullRequest
0 голосов
/ 23 января 2019

Компилятор 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

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Я не уверен, разрешает ли Swift fallthrough со значением привязки.

Но это, безусловно, работает:

func bar(v: Foo) {
    switch v {
    case .a(let count),
         .b(let count),
         .c(let count):
        print(count)
    case .d: break
    }
}
0 голосов
/ 23 января 2019

Временное решение:

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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...