Swift 枚举Enumerations

前端之家收集整理的这篇文章主要介绍了Swift 枚举Enumerations前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Swift里面的枚举和C,OC里面的最大区别是多了一个case.

枚举表达式

enum SomeEnumeration {
    // enumeration definition goes here
}

没有初始值和类型

// 例子1
enum CompassPoint{
    case North
    case South
    case East
    case West
}
var directionToHead = CompassPoint.West // 第一次声明一个变量的时候需要加上枚举名
directionToHead = .South // 第二次可以直接使用.操作
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")
}
// 在上面的例子中枚举CompassPoint并没有明确的数据类型,所以枚举也没有默认值 0  1  2  3 
// 例子2
// 枚举的多个case可以写在一行,中间使用","分割开
enum Planet {
    case Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune
}

关联值

苹果使用的是二维码和条形码的例子.

// 例子3
enum Barcode {
    case UPCA(Int,Int,Int) //条形码
    case QRCode(String)           // 二维码
}

var productBarcode = Barcode.UPCA(8,85909,51226,3) // 给一个变量赋值
//productBarcode = .QRCode("ABCDEFGHIJKLMNOP")
switch productBarcode {
case let .UPCA(numberSystem,manufacturer,product,check):
    print("UPC-A: \(numberSystem),\(manufacturer),\(product),\(check).")
case let .QRCode(productCode):
    print("QR code: \(productCode).")
}
在上面的例子中,都没有初始值和类型.
// 例子4 (给上面的例子2 增加了数据类型和初始值)
enum Planet1: Int {
    case Mercury = 1,Neptune
}
// 打印Raw Values
print("Venus.rawValue: \(Planet1.Venus.rawValue).") //Venus.rawValue: 2.
// 如果我们不做 Mercury = 1 的操作那么上面的打印结果是:Venus.rawValue: 1.
// 也就是说,我们在给一个枚举设置类型的时候,Swift会给我们一个默认初始值 Int类型的是从0开始
// 获取raw value 是7的枚举
let possiblePlanet = Planet1(rawValue: 7)
print("possiblePlanet: \(possiblePlanet)")

递归枚举

enum ArithmeticExpression {
    case Number(Int)
    indirect case Addition(ArithmeticExpression,ArithmeticExpression)
    indirect case Multiplication(ArithmeticExpression,ArithmeticExpression)
}
或者加上 indirect
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 .Addition(let left,let right):
        return evaluate(left) + evaluate(right)
    case .Multiplication(let left,let right):
        return evaluate(left) * evaluate(right)
    }
}
 
// evaluate (5 + 4) * 2
let five = ArithmeticExpression.Number(5)
let four = ArithmeticExpression.Number(4)
let sum = ArithmeticExpression.Addition(five,four)
let product = ArithmeticExpression.Multiplication(sum,ArithmeticExpression.Number(2))
print(evaluate(product))
// Prints "18"

猜你在找的Swift相关文章