美文网首页
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