Проблема со статической переменной для перечисления перечисления в Swift - PullRequest
0 голосов
/ 09 октября 2018

Swift 4.2 содержит удивительный кусок кода для перечисления перечислений, и этот вопрос касается не только циклических перечислений.

У меня было такое перечисление:

enum MyEnum: String {
    case session1 = "Morning"
    case session2 = "Noon"
    case session3 = "Evening"
    case session4 = "Night"
}

Кроме того, яхочу вернуть какой-то объект (скажем sessionDetails).Поэтому я создал для него расширение.

extension RawRepresentable where RawValue == String {
    var details: <Some_Object_Type> {
        /// Create & return corresponding object
    }
}

Итак, если я хочу получить подробности полуденного сеанса, я могу сделать это так:

MyEnum.session2.details

Хорошо!Теперь я хочу сгруппировать мои сеансы как первый и второй пакет и т. Д. Итак, в Enum есть небольшое добавление кода:

enum MyEnum: String {
    case session1 = "Morning"
    case session2 = "Noon"
    case session3 = "Evening"
    case session4 = "Night"

    static let firstBatch = [session1.details, session2.details]
    static let secondBatch = [session3.details, session4.details]
    static let weekendBatch = [session1.details, session4.details]
}

Обратите внимание, что мы не можем использовать сохраненные свойства с перечислениями.Здесь нужно ключевое слово «static».

Что я хочу:

Я хочу получить подробную информацию о пакетных элементах.Следующая строка будет работать:

MyEnum.firstBatch

Она предоставит детали сеанса 1 и 2. (объекты).

Проблема:

ВышеОператор будет выполняться только один раз, поскольку он является статическим.Детали каждого сеанса являются динамическими, и я хочу, чтобы «детали» вызывались каждый раз, когда я использую слово .details

Примечание:

Iдолжен предоставить детали сгруппированных элементов другому методу утилит.Нет способа изменить структуру ввода утилит.Для проверки требуется массив объектов.

Требуется помощь !!

1 Ответ

0 голосов
/ 09 октября 2018

Вам просто нужно вычислить статические свойства вместо сохраненных свойств.

enum MyEnum: String {
    case session1 = "Morning"
    case session2 = "Noon"
    case session3 = "Evening"
    case session4 = "Night"

    static var firstBatch:[String] {
        return [session1.details, session2.details]
    }

    static var secondBatch:[String] {
        return [session3.details, session4.details]
    }

    static var weekendBatch:[String] {
        return [session1.details, session4.details]
    }
}
...