美文网首页
swift-枚举

swift-枚举

作者: malgee | 来源:发表于2018-03-22 18:50 被阅读8次

    swift中的枚举不仅能表示整型的枚举, 还可以表示其他类型的枚举(字符串枚举)

    可选性的实质就是枚举类型,一个值是nil, 一个值就是定义的类型

    // 通过添加:Int 定义枚举是整型的枚举
    enum Month: Int {
        case January
        case February
        case March
        case April
        case May
        case June
        case July
        case August
        case September
        case October
        case November
        case December
    }
    
    // .June 前面知道是枚举类型, 所以可以省略前面的枚举名称,直接 . 出来后面的枚举值
    let currentMonth: Month = Month.June
    
    let currentMonth2: Month = .June
    
    // 整型的枚举 原始值 rawValue
    Month(rawValue: 10)  // November
    
    // 字符串类型的枚举, 后面的值可以不写, 默认就是枚举名称, 也可以写出来
    enum Language: String {
    
        case Swift = "swift"
        case ObjectiveC = "Objective-C"
        case HTML
        case CSS
    }
    
    let myLanguage: Language = .ObjectiveC
    
    // .rawValue 获取枚举的值
    print(myLanguage.rawValue)  // Objective-C
    
    // associate value 相关联的枚举, 可以存放不同类型
    
    enum ATMStatus {
    
        case Success(Int)
        case Error(String)
    }
    
    var balance = 1000
    
    func draw(amount: Int) -> ATMStatus {
    
        if balance >= amount {
            
            balance -= amount
            
            return .Success(balance)
        }
        else {
        
        return .Error("余额不足")
        }
    }
    
    let myStatus = draw(amount: 100)
    
    switch myStatus {
        case let .Success(newValue):
            print("还剩余 \(newValue) 元")
            
        case let .Error(msg):
            print("error: \(msg)")
    }
    
    输出: 还剩余 900 元
    
    对于枚举的值的不关心, 可以这么写:
    switch myStatus {
    case .Success:
        print("成功")
        
    case .Error:
        print("失败")  
    }
    
    // 补充:
    
    // 多个参数的枚举
    enum Shape {
        case Square(side: Double)
        case Rectangle(width: Double, height: Double)
        case Circle(centerX: Double, centerY: Double, radius: Double)
        case Point
    }
    
    // 这里给枚举传参赋值
    let square = Shape.Square(side: 10)
    
    let Rectangle = Shape.Rectangle(width: 10, height: 30)
    
    let Circle = Shape.Circle(centerX: 0, centerY: 0, radius: 10)
    
    let Point = Shape.Point
    
    
    func area(shape: Shape) -> Double {
    
        switch shape {
        case let .Square(side: side):
            
            return side * side
            
        case let .Rectangle(width: width, height: height):
            
            return width * height
            
        case let .Circle(_, _, radius: radius):
            
            return M_PI * radius * radius
    
        case .Point:
            
            return 0
        }
    
    }
    // 计算面积
    area(shape: square)
    area(shape: Rectangle)
    area(shape: Circle)
    area(shape: Point)
    

    可选性的实质就是枚举

    可选性有2个枚举值: `none`、 `some(xx)`
     /// The absence of a value.
        ///
        /// In code, the absence of a value is typically written using the `nil`
        /// literal rather than the explicit `.none` enumeration case.
        case none
    
        /// The presence of a value, stored as `Wrapped`.
        case some(Wrapped)
    `
    
    // 定义一个可选性
    var testOption: Optional<String> = Optional.some("malgee")
    
    testOption = .none
    
    switch testOption {
    case .none:
        print("nil")
    case let .some(string):
        
        print(string)
    }
    
    

    相关文章

      网友评论

          本文标题:swift-枚举

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