Рефакторинг двух похожих операторов быстрого переключения - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть пара операторов switch, в которых я первоначально преобразую некоторые значения JSON в удобное для пользователя имя (convertCategoryValueToName).

Позже, в другой части приложения, мне нужно выполнить некоторые проверки на основе понятного имени, и я написал соответствующий переключатель для преобразования имени обратно в его первоначальное значение (convertCategoryNameToValue).

Операторы переключения длинные, и я не доволен повторением. Есть ли способ реорганизовать эту работу в один коммутатор?

Примеры сокращенных переключателей ...

func convertCategoryValueToName(category: String) -> String? {
    var categoryName: String?
    switch category {
    case "dessert":
        categoryName = "Desserts"
    case "drink":
        categoryName = "Drinks"
    default:
        break
    }
    return categoryName
}

func convertCategoryNameToValue(category: String) -> String? {
    var categoryValue: String?
    switch category {
    case "Desserts":
        categoryValue = "dessert"
    case "Drinks":
        categoryValue = "drink"
    default:
        break
    }
    return categoryValue
}

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Это будет делать:

let dict = ["dessert": "Desserts",
            "drink"  : "Drinks"]

func convertCategoryValueToName(category: String) -> String? {
    return dict[category]
}

func convertCategoryNameToValue(category: String) -> String? {
    return dict.keys.first(where: { $0 == category})
}
0 голосов
/ 05 ноября 2018

Вы должны просто использовать enum.

enum Category: String {
    case dessert = "Desserts"
    case drink = "Drinks"
}

Затем используйте Category.dessert.rawValue, чтобы отобразить "удобное для пользователя имя" в пользовательском интерфейсе, и используйте enum кейсы для всего остального в вашем коде.

...