美文网首页
Enum、Struct、Class类型

Enum、Struct、Class类型

作者: FredYJH | 来源:发表于2017-11-21 23:26 被阅读15次

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) // 调用

相关文章

网友评论

      本文标题:Enum、Struct、Class类型

      本文链接:https://www.haomeiwen.com/subject/ekugvxtx.html