如何在Swiftui中获得基于其他枚举的枚举值



我试图从基于其他枚举的枚举中获取字符串,我该怎么做?

我想得到图标:基于GenderString 的GenderIcon的字符串

我的游乐场:

import UIKit
enum GenderString: String {
case man = "man"
case woman = "woman"
}
enum GenderIcon: String {
case man = "🙍‍♂️"
case woman = "🙍‍♀️"
}
var gender: GenderString = .man
var genderIcon: GenderIcon = .woman  // case is wowan at start and it's normal

print("👉👉👉👉 (gender)")
// I tried these :
print("👉👉👉👉 (genderIcon.rawValue(gender))")  // < - I want here the man icon based on gender
print("👉👉👉👉 (genderIcon.rawValue(gender.rawValue))")
print("👉👉👉👉 (genderIcon(gender))") 
print("👉👉👉👉 (genderIcon(gender.rawValue))")

有两种方法可以做到这一点。第一种方法是在枚举上创建一个属性,该属性从另一个枚举返回一个值。第二种方法是在使用另一个作为属性的枚举上创建一个init

第一个示例:

enum GenderString: String {
case man = "man"
case woman = "woman"
var icon: GenderIcon {
switch self {
case .man: return .man
case .woman: return .woman
}
}
}
enum GenderIcon: String {
case man = "🙍‍♂️"
case woman = "🙍‍♀️"
}
var gender: GenderString = .man
gender.icon.rawValue // 🙍‍♂️

第二个例子。

enum GenderString: String {
case man = "man"
case woman = "woman"
}
enum GenderIcon: String {
case man = "🙍‍♂️"
case woman = "🙍‍♀️"
init(gender: GenderString) {
switch gender {
case .man: self = .man
case .woman: self = .woman
}
}
}
var gender: GenderString = .woman
var icon = GenderIcon(gender: gender)
icon.rawValue // 🙍‍♀️

但是,因为您可以将属性添加到枚举中,所以可以跳过为图标创建单独的枚举,并将示例简化为:

enum Gender: String {
// Implicitly uses the case name as the raw string value
case man
case woman
var icon: String {
switch self {
case .man: return "🙍‍♂️"
case .woman: return "🙍‍♀️"
}
}
}
var man: Gender = .man
man.icon // 🙍‍♂️

最新更新