https://www.raywenderlich.com/119881/enums-structs-and-classes-in-swift
1、替代字符串
有些时候,我们要给某些变量频繁的赋值字符串,这时候就应该想想用什么方式避免拼写错误。
下面举个例子:
需求:在某种情况下我们要得到颜色的字符串值,比如这样:let blackValue = "black" ,那我们如果直接输入字符串,当然可以得到结果,但是这样很容易出错,因为编译器不会自动检验,而且如果当做参数传给其他函数的时候,也不能起到见名思意的作用,这时候我们可以使用enum。
enum ColorName: String {
case black,green,red,white
}
调用:ColorName.black
上面的枚举已经解决了我们一般的需求,那如果我们也要输出RGB类型的呢?
这时我们要用到枚举的关联值
enum CCSColor {
enum ColorName: String {
case black,green,red,white
}
case named(ColorName)
case rgb(UInt8, UInt8, UInt8)
}
因为枚举的关联值返回的是 option类型
,我们还不能得到字符串,要继承CustomStringConvertible协议
完整代码:
enum CCSColor {
// 内嵌
enum ColorName: String {
case black,green,red,white
}
case named(ColorName)
case rgb(UInt8, UInt8, UInt8)
}
extension CCSColor: CustomStringConvertible {
var description: String {
switch self {
case .named(let colorName):
return colorName.rawValue
case .rgb(let red, let green, let blue):
return String(format: "#%02X%02X%02X", red,green,blue)
}
}
}
let ccs = CCSColor.named(.black) // 调用
print(ccs)
2、保存常量
比如我们经常会用到的Pi=3.141592627
这里面没有case
enum Math {
static let pi = 3.141592627 // golden mean
}
print(Math.phi) // 调用