默认初始值设定项为failable
.这意味着,如果接收到的参数与有效的枚举大小写不匹配,则返回nil
.
现在要做两件不兼容的事情:
- 您希望设置默认的初始值设定项,使其不可失败.实际上,您希望在收到的参数无效时创建一个默认枚举值.
- 在重新定义的初始值设定项中,您希望使用与新初始值设定项相同的名称调用一个失败的初始值设定项(该初始值设定项已不存在).
这是不可能的,我建议以下三种可能的解决方案:
- 创建不同的init
使用默认值和不同的参数名定义一个新的不可故障初始值设定项,并在其中调用默认的可故障初始值设定项.
enum Language: String {
case english = "English", italian = "Italian", french = "French"
init(fromRawValue: String) {
self = Language(rawValue: fromRawValue) ?? .english
}
}
- 重新定义默认初始化
重新定义默认初始值设定项,使其不可失败,并在其中写入完整的逻辑.
enum Language: String {
case english = "English", italian = "Italian", french = "French"
init(rawValue: String) {
switch rawValue {
case "Italian": self = .italian
case "French": self = .french
default: self = .english
}
}
}
- 创建静态函数
enum Language: String {
case english = "English", italian = "Italian", french = "French"
static func build(rawValue: String) -> Language {
return Language(rawValue: rawValue) ?? .english
}
}
现在你可以建立一个Language
值的写作:
let italian = Language.build(rawValue: "Italian") // Italian
let defaultValue = Language.build(rawValue: "Wrong input") // English