重构两个类似的swift switch语句

时间:2018-11-05 16:42:11

标签: swift switch-statement refactoring

我有几个switch语句,最初将一些JSON值转换为用户友好名称(convertCategoryValueToName)。

稍后,在应用程序的不同部分中,我需要根据用户友好的名称进行一些检查,并且我编写了相应的开关以将名称转换回其原始值(convertCategoryNameToValue)。

switch语句很长,我对重复不满意。有没有办法将这项工作重构为一个Switch?

缩短了开关示例...

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 :(得分:3)

您应该只使用enum

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

然后使用Category.dessert.rawValue在UI上显示“用户友好名称” ,并对代码中的其他所有内容使用enum大小写。

答案 1 :(得分:1)

这可以做到:

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})
}