Как получить имя регистрационного регистра по его необработанному значению в Swift 4? - PullRequest
0 голосов
/ 29 августа 2018

Использование Xcode 9.4.1 и Swift 4.1

Имея перечисление с несколькими регистрами типа Int, как я могу напечатать имя регистра по его rawValue?

public enum TestEnum : UInt16{
case ONE    = 0x6E71
case TWO    = 0x0002
case THREE  = 0x0000
}

Я получаю доступ к Enum по rawValue:

print("\nCommand Type = 0x" + String(format:"%02X", someObject.getTestEnum.rawValue))
/*this prints: Command Type = 0x6E71
if the given Integer value from someObject.TestEnum is 28273*/

Теперь я дополнительно хочу напечатать "ОДИН" после значения HEX.

Мне известен Вопрос: Как получить имя значения перечисления в Swift? но это нечто иное, потому что я хочу определить имя дела по необработанному значению дела, а не по значению перечисления.

Желаемый вывод:

Тип команды = 0x6E71, ОДИН

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Вы можете создать значение enum из его rawValue и получить его регистр String, используя String.init(describing:).

public enum TestEnum : UInt16 {
    case ONE    = 0x6E71
    case TWO    = 0x0002
    case THREE  = 0x0000
}

let enumRawValue: UInt16 = 0x6E71

if let enumValue = TestEnum(rawValue: enumRawValue) {
    print(String(describing: enumValue)) //-> ONE
} else {
    print("---")
}
0 голосов
/ 29 августа 2018

Вы не можете получить имя дела как String, так как тип перечисления не String, поэтому вам нужно добавить метод, чтобы вернуть его самостоятельно ...

public enum TestEnum: UInt16, CustomStringConvertible {
    case ONE = 0x6E71
    case TWO = 0x0002
    case THREE = 0x0000

    public var description: String {
        let value = String(format:"%02X", rawValue)
        return "Command Type = 0x" + value + ", \(name)"
    }

    private var name: String {
        switch self {
        case .ONE: return "ONE"
        case .TWO: return "TWO"
        case .THREE: return "THREE"
        }
    }
}

print(TestEnum.ONE)

// Command Type = 0x6E71, ONE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...