我有几个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
}
答案 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})
}