Жасмин - как подсмотреть методы экземпляра

Вы можете создать частное Inner перечисление. Реализация немного повторяема, но понятна и проста. 1 строка rawValue, 2 строки init, которые всегда выглядят одинаково. Inner имеет метод, возвращающий «внешний» эквивалент, и наоборот.

Имеет ли дополнительное преимущество то, что вы можете напрямую сопоставить случай перечисления с String, в отличие от других ответов здесь.

Пожалуйста, приветствуйте этот ответ, если вы знаете, как решить проблему повторяемости с помощью шаблонов, у меня нет времени смешаться с ней прямо сейчас.

@objc enum MyEnum: NSInteger, RawRepresentable, Equatable {
    case
    option1,
    option2,
    option3

    // MARK: RawRepresentable

    var rawValue: String {
        return toInner().rawValue
    }

    init?(rawValue: String) {
        guard let value = Inner(rawValue: rawValue)?.toOuter() else { return nil }
        self = value
    }

    // MARK: Obj-C support

    private func toInner() -> Inner {
        switch self {
        case .option1: return .option1
        case .option3: return .option3
        case .option2: return .option2
        }
    }

    private enum Inner: String {
        case
        option1 = "option_1",
        option2 = "option_2",
        option3 = "option_3"

        func toOuter() -> MyEnum {
            switch self {
            case .option1: return .option1
            case .option3: return .option3
            case .option2: return .option2
            }
        }
    }
}
22
задан Bojan Komazec 23 April 2018 в 16:28
поделиться