Swift - Enumerations

Support

String / Character / Integer / Float

// 第一个字母大写
enum Planet {
     case mercury, venus, earth. mars, jupiter, saturn, uranus, neptune
} 

声明与使用

// 不会隐式赋值 0、1、2、3
enum CompassPoint {
     case north
     case south
     case east
     case west
}

// 初始化一个 CompassPoint
var directionToHead = CompassPoint.west
// 重新设置不同的 CompassPoint 值,使用 "."
directionToHead = .east

// 匹配 switch
switch directionToHead {
       case .north:
            print("Lots of planets have a north")
       case .south:
            print("Watch out for penguins")
       case .east:
            print("Where the sun rises")
       case .west:
            print("Where the skies are blue")
}

获取枚举集合

enum Beverage: CaseIterable {
     case coffee, tea, juice
}

let numberOfChoices = Beverage.allCases.count
for bevarage in Beverage.allCases {
     print(beverage)
}

原生值 -- 唯一

enum ASCIIControlCharacter: Character {
// 支持 String / Character / Integer / Float 
     case tab = "\t" 
     case lineFeed = "\n"
     case carriageReturn = "\r"
}

隐式分配原生值

enum PlanetInteger: Int {
     case mercury = 1, venus, earth, mars, jupiter, saturn, uranus, neptune
}
// PlantInteger.mercury = 1, PlantInteger.venus = 2

// 字符串原生值默认是 case's name
enum CompassPointString: String {
     case north, south, east, west
}

原生值初始化

// 返回可选,因为不是每一个 rawValue 都能对应一个 case
let possiblePlanet = PlanetInteger(rawValue: 7)
let positionToFind = 11
if let somePlanet = PlanetInteger(rawValue: positionToFind) {
   switch somePlanet {
       case .earth:
          print("Mostly harmless")
       default: 
          print("Not a safe place for humans")
   }
}else {
    print("There isn't a planet at position")
}

枚举递归

// 递归 case 前面加 indirect
enum ArithmeticExpression {
     case number(Int)
     indirect case addition(ArithmeticExpression, ArithmeticExpression)
     indirect case multiplication(ArithmeticExpression, ArithmeticExpression)
}

// OR

// enum 前面加 indirect
indirect enum ArithmeticExpression {
     case number(Int)
     case addition(ArithmeticExpression, ArithmeticExpression)
     case multiplication(ArithmeticExpression, ArithmeticExpression)
}

let five = ArithmeticExpression.number(5)
let four = ArithmeticExpression.number(4)
let sum  = ArithmeticExpression.addition(five, four)
let product = ArithmeticExpression.multiplication(sum, ArithmeticExpression.number(2))
func evaluate(_ expression: ArithmeticExpression) -> Int {
     switch expression {
            case let .number(value):
                 return value
            case let.addition(left, right):
                 return evaluate(left) + evaluate(right)
            case let .multiplication(left, right): 
                 return evaluate(left) * evaluate(right)   
     }
}

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

推荐阅读更多精彩内容

  • 有了孩子使我们的生活有了希望,陪伴孩子使我们的生活变得精彩。所以,我们不应该去抱怨自己的辛苦,而是要用心发现和享受...
    初夏雨_5d40阅读 271评论 0 0
  • 今天终于下定了决心,从工作了18年的教师岗位上辞职,因为要做的太多,我必须把自己解放出来,勇敢去试。我想要用...
    课间操阅读 210评论 1 2
  • 记忆微凉。那时候的北方,立冬后,寒风料峭,芦花荡漾(如图),几个小伙伴总是会到芦苇荡找鸟窝,每次都能有惊喜,自我满...
    海上散人阅读 193评论 0 0
  • 国内山河一片大好,一派过年气氛,我不晓得,我的过年气氛来自于几个微信群大家胡侃过年的事儿。 主动要求留下,让领导同...
    旷野里的树儿阅读 351评论 2 5