我正在从“The Swift Programming Language(Swift 3 beta)”中学习Swift 3。下面是他们的枚举示例。在本示例的最后,他们编写了“使用init?(rawvalue:)
从原始值创建枚举实例”。任何人都可以告诉我,如何做到这一点。感谢。
enum Rank: Int {
case ace = 1 // Raw value
case two, three, four , five , six, seven, eight, nine, ten
case jack, queen, king
init?(rawValue: Int) {
self = rawValue == 1 ? .ace : .jack
}
func simpleDescription() -> String{
switch self {
case .ace:
return "ace"
case .jack:
return "jack"
case .queen:
return "queen"
case .king:
return "king"
default:
return String(self.rawValue)
}
}
}
答案 0 :(得分:2)
正如你在这里看到的那样:
enum Rank: Int
"你的" Rank
枚举原始值必须为Int
类型。
因此,要创建具有Rank
值的新ace
元素,您可以写:
let ace = Rank(rawValue: 1)
要创建女王,你会写:
let queen = Rank(rawValue: 12)
另请注意,Rank
init返回一个可选项。这意味着如果您为其指定了无效的Int
值,则会获得nil
作为回报。
例如:
let notValid = Rank(rawValue: 100) //gives you nil in return
希望对你有所帮助。
答案 1 :(得分:1)
您可以为枚举创建一个可选的init
,如下所示:
init?(rawValue: String) {
if rawValue == "ace" {
self = .ace
} else {
return nil
}
}
else
处理term
中的无效/意外值(这就是为什么init是可选的初始化器 - 如果给出无效输入,它可能返回nil)。希望这有帮助!
答案 2 :(得分:1)
使用init?(rawvalue:)
初始化程序:
let enumValue1 = Rank(rawValue: 100)
print(enumValue1)
// will print nil because raw value is too big
let enumValue2 = Rank(rawValue: 6)
print(enumValue)
// will print `Optional(ACNotificationsDemo.Rank.six)`
答案 3 :(得分:0)
enum OptionalValues<T>{
case None
case Some(T)
}
var possibleInteger:
OptionalValue<Int>=.None
possibleInteger = .Some(100)