#枚举 Swift 的枚举类型功能强大,跟类(class),结构体(struct)比起,有过之而不及。下面一起来看看它的庐山真面目。
定义
定义时使用关键字 eumn, 而且可以像switch那样使用case,像这样:
enum LevelProgress
{
case Completed
case attemptedButIncomplete
case unattempted
}
枚举类型,还可以进行类型绑定,修改一下上面的例子:
enum LevelProgress
{
case Completed(Int)
case AttemptedButIncomplete(Double, NSDate)
case Unattempted
}
这时,就可以这个使用枚举了:
var level1 = LevelProgress.Completed(3)
如果变量定义时,初始化后通过推出得到是某枚举类型,就可以忽略枚举类型的名字,而直接使用:
var level1 = LevelProgress.Completed(3)
level1 = .AttemptedButIncomplete(0.75, testDate)
再比如:
var level2 : LevelProgress
level2 = .Completed(3)
如果枚举作为函数参数,同样可以在调用时进行简单书写,如:
func printLevelDetails(level: LevelProgress)
printLevelDetails( .Completed(3) )
使用
枚举最常用于Switch,比如:
func printLevelDetails(level: LevelProgress)
{
switch level
{
case .Unattempted:
println("Didn't attempt")
case .AttemptedButIncomplete(let percentComplete, let lastAttemptedDate):
println("About \(percentComplete) complete, last tried \(lastAttemptedDate).")
case .Completed(let stars):
println("Complete with \(stars) stars.")
}
}
原始值
在使用C语言枚举类型时,如果你想获得枚举之原始值,即整数,需要进行类型转换,而Swift则提供更简便的方法。
用原始值定义枚举
这个比较简单,类似C语言,例如:
enum FirstYearOfDecade: Int
{
case Seventies = 1970
case Eighties = 1980
case Nineties = 1990
}
获取原始值
使用toRaw() 方法即可,上例就可以这么处理:
FirstYearOfDecade.Eighties.toRaw()
let instantiatedDecade = FirstYearOfDecade.Seventies
instantiatedDecade.toRaw()
这时,instantiatedDecade.toRaw() 返回的是一个整型 1970。那么如果想通过原始值获得对应的枚举值,要怎么做的呢?Swift 提供了fromRaw方法。
if let otherDecade = FirstYearOfDecade.fromRaw(1990)
{
switch otherDecade
{
case .Nineties:
println("I love the 90s")
default:
println("What decade are you talking about?")
}
}
else
{
println("Couldn't find it")
}
不过,大家注意到没有,fromRaw返回的是可选型的值。为什么呢?原因是你可能提供了一个并没有对应枚举型的原始值,需要返回nil,这样处理更为安全。
本文参考:http://www.codingexplorer.com/enumerations-swift/
本文深入探讨了Swift中枚举类型的定义、使用方法、原始值获取及转换,并通过实例展示了其在Switch语句中的应用。


8208

被折叠的 条评论
为什么被折叠?



