在开发中我们经常会使用enum来枚举不同的状态。
举个例子,在测试登录服务器的时候,可能会有多中权限的账号存在,比如管理员、普通用户、开发者等,我们可以用一个enum来表示他们
enum Enum_Account{
case Adminstrator
case User
case Developer
}
假如我需要对每一种状态,返回固定的中文显示的String,最常规的方法可能就类似下面
func getAccountAuth(accont:Enum_Account)-> String{
switch status{
case: .Adminstrator
return "管理员"
case: .User
return "普通用户"
case: .Developer
return "开发者"
}
}
当然除此之外还有更好的办法,Swift原生就支持对enum指定一个类型
enum Enum_Account : String {
case Adminstrator = "管理员"
case User = "普通用户"
case Developer = "开发者"
}
那我们使用的时候,就直接可以通过 Enum_Account.rawValue取到上面的String值
但是这种方法有一个局限性,就是只能对enum指定一个类型,而且对enum指定的类型只能是字面量类,例如,如果把enum 的类型设置为UIColor:
enum Enum_Color:UIColor {
}
此时会提示错误:
Raw Raw type 'UIColor' is not expressible by any literal
这个时候我们可以使用extension解决这个问题,我们可能常常会为一个class做extension, 其实enum也可以做extension!
enum Enum_Common_Color {
case Login_background
case Negative_Text
case Positive_Text
}
extension Enum_Common_Color{
var color:UIColor{
switch self {
case .Login_background:
return UIColor(red: 57/255.0, green: 60/255.0, blue: 69/255.0, alpha: 1.0)
case .Negative_Text:
return UIColor(red: 0x19/255.0, green: 0x7F/255.0, blue: 0xBF/255.0, alpha: 1.0)
case .Positive_Text:
return UIColor(red: 0xF7/255.0, green: 0x44/255.0, blue: 0x44/255.0, alpha: 1.0)
/*default:
return UIColor.blue*/
}
}
}
那我们要获取状态对应颜色的时候,只需要通过Enum_Common_Color.Login_background.color
这样的方式就可以获取颜色啦!