【LearnSwift】枚举

下载源码

下载地址


源码

import UIKit

// 指定Int型rawValue
enum Rank : Int {
    
    case Ace = 1
    
    case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten
    
    case Jack, Queen, King
    
    func simpleDescription() -> String {
        
        switch self {
            
        case .Ace:
            
            return "ace"
            
        case .Jack:
            
            return "jack"
            
        case .Queen:
            
            return "queen"
            
        case .King:
            
            return "king"
            
        default:
            
            return String(self.rawValue)
        }
    }
    
    func compareRank(anotherRank:Rank) -> String {
    
        if self.rawValue > anotherRank.rawValue {
            
            return "\(self.simpleDescription()) is bigger than \(anotherRank.simpleDescription()) !"
        
        } else if self.rawValue < anotherRank.rawValue {
        
            return "\(self.simpleDescription()) is smaller than \(anotherRank.simpleDescription()) !"
            
        } else {
        
            return "\(self.simpleDescription()) is equal to \(anotherRank.simpleDescription()) !"
        }
        
    }
}

// 不指定类型是没有rawValue
enum Suit {

    case Spades, Hearts, Diamonds, Clubs
    
    func simpleDiscription() -> String {
    
        switch self {
        
        case .Spades:
            
            return "spades"
            
        case .Hearts:
            
            return "hearts"
            
        case .Diamonds:
            
            return "diamonds"
            
        case .Clubs:
            
            return "clubs"
            
        }
    }
    
    func color() -> String {
    
        switch self {
        
        case .Spades, .Clubs:
            
            return "black"
            
        case .Hearts, .Diamonds:
            
            return "red"
            
        }
    }
}

// 指定String型rawValue
enum CompassPoint: String {

    case North,
         South,
         East,
         West
}

// 这是一种嵌套写法
enum ArithmeticExpression {

    case Number(Int)
    
    indirect case
             Addtion(ArithmeticExpression, ArithmeticExpression)
    indirect case
             Multiplication(ArithmeticExpression, ArithmeticExpression)
}

// 这是另一种嵌套写法
//indirect enum ArithmeticExpression {
//
//    case Number(Int)
//    
//    case Addition(ArithmeticExpression, ArithmeticExpression)
//    
//    case Multiplication(ArithmeticExpression, ArithmeticExpression)
//}

func evaluate(expression: ArithmeticExpression) -> Int {

    switch expression {
    
    case .Number(let value):
        
        return value
        
    case .Addtion(let left, let right):
        
        return evaluate(left) + evaluate(right)
        
    case .Multiplication(let left, let right):
        
        return evaluate(left) * evaluate(right)
    }
}

class ViewController: UIViewController {

    override func viewDidLoad() {
        
        super.viewDidLoad()
        
        let ace = Rank.Ace
        
        _ = ace.rawValue
        
        if let convertedRank = Rank(rawValue: 3) {
        
            _ = convertedRank.simpleDescription()
        }
        
        print("\(Rank.Five.compareRank(Rank.Jack))")
        
        print("\(Suit.Diamonds.color())")
        
        print("\(CompassPoint.East.rawValue)")
        
        // 枚举嵌套用法
        // evaluate (5 + 4) * 2
        let five = ArithmeticExpression.Number(5)
        
        let four = ArithmeticExpression.Number(4)
        
        let sum  = ArithmeticExpression.Addtion(five, four)
        
        let product = ArithmeticExpression.Multiplication(sum, ArithmeticExpression.Number(2))
        
        print(evaluate(product))

    }
}

输出

5 is smaller than jack !
red
East
18
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,403评论 25 708
  • 前言 暑假我在学校学习了一个月的时间 ,在这一个月期间我学习了关于安卓移动前端开发的一些简单的知识。之前我对安卓移...
    W_Nicotine阅读 11,680评论 1 10
  • 第三天的黄昏前,我们回到住处换上拖鞋,因为我们要去大金塔了。在缅甸,拖鞋出行,才表示正式和尊重。 ...
    生哥小佛阅读 1,768评论 1 2
  • 《平淡生活》——海岩 “平淡生活”是讽刺,更是祈求~ 看完这本书,最大的感受就是,恶人有恶报,好人...
    小辉辉xhh阅读 1,400评论 0 2
  • 猛然间抬头,发现窗外已是灰蒙蒙的,细雨分分飘落。深秋时分,仿佛还是昨年那个青涩的自己,却不曾想,自己也早已不是从前...
    圆的方阅读 201评论 0 0