gpt4 book ai didi

swift - 从属性的原始值中获取枚举

转载 作者:搜寻专家 更新时间:2023-11-01 06:32:18 26 4
gpt4 key购买 nike

给定以下枚举:

enum Characters: String {

case Joe, Frank, Jimmy

var hairColor: String {
switch self {
case .Joe: return "Brown"
case .Frank: return "Black"
case .Jimmy: return "Blond"
}
}

var style: String {
switch self {
case .Joe: return "Cool"
case .Frank: return "Bad"
case .Jimmy: return "Silent"
}
}
}

我希望能够使用 rawValue 从其中一个属性的字符串中获取枚举。那么,我可以做什么:

let newGuy = Characters(rawValue: "Joe")

并得到.Joe,我也希望能够做到:

let newGuy = Characters(rawValue: "Cool")

并得到.Joe


let newGuy = Characters.style(rawValue: "Cool")

不工作的错误是:

Instance member 'style' cannot be used on type 'Character'

最佳答案

如果您希望能够基于实例属性值创建枚举,则需要创建自己的初始化程序。在您当前的实现中,头发颜色/样式与角色本身之间没有相互联系。实例属性(头发颜色/样式)取决于角色,但反之则没有关系。

你必须为 style 和 hairColor 创建一个初始化器,我是为 style 做的,你可以用类似的方式为 hairColor 做。

请看下面的代码:

enum Characters: String {

case Joe, Frank, Jimmy

var hairColor: String {
switch self {
case .Joe: return "Brown"
case .Frank: return "Black"
case .Jimmy: return "Blond"
}
}

var style: String {
switch self {
case .Joe: return "Cool"
case .Frank: return "Bad"
case .Jimmy: return "Silent"
}
}

init(style: String){
switch style {
case "Cool":
self = Characters.Joe
case "Bad":
self = Characters.Frank
default:
self = Characters.Jimmy
}
}
}

Characters(style: "Bad") //initializes Frank
Characters(rawValue: "Joe") //works just like before

关于swift - 从属性的原始值中获取枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45522854/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com