Связанный тип перечисления Реализуйте CaseItratable - PullRequest
4 голосов
/ 22 октября 2019

У меня есть два перечисления и одно связанное перечисление. Мне нужно получить все возможные случаи из enum A и enum B.

enum A {
    case a
    case b
    case c
}

enum B {
    case d
    case e
    case f
}

enum C {
    case first(A)
    case second(B)
}

extension C: CaseItratable {
 //How to implement?
}

Нужен метод allCases в enum C, который возвращает все случаи в enum A и все случаи в enum B

Ответы [ 2 ]

1 голос
/ 22 октября 2019

Более полезно, если A и B равны CaseIterable, тогда вы можете реализовать CaseIterable в C следующим образом:

extension A: CaseIterable {}
extension B: CaseIterable {}

extension C: CaseIterable {

    static var allCases: [C] {
        return A.allCases.map(C.first) + B.allCases.map(C.second)
    }
}
1 голос
/ 22 октября 2019

1. Соответствует протоколу enum A и enum B CaseIterable

enum A: CaseIterable {
    case a, b, c
}

enum B: CaseIterable {
    case d, e, f
}

2. Получить все случаи enum A и enum B с использованием allCases.

enum C {
    case first(A)
    case second(B)

    var casesOfA: [A] {
        return A.allCases //here...
    }

    var casesOfB: [B] {
        return B.allCases //here...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...