美文网首页
Swift语法 -- [04 - 枚举]

Swift语法 -- [04 - 枚举]

作者: happy神悦 | 来源:发表于2020-10-19 18:28 被阅读0次

枚举为一组相关值定义了一个通用类型,从而可以让你在代码中类型安全地操作这些值。

1. 枚举的基本用法

enum RequestType{
    case get
    case post
    case put
    case delete
}

2. 关联值(Associated Values)

有时会将枚举的成员值跟其他类型的关联存储在一起,会非常有用

enum Date {
    case digit(year: Int, month: Int, day: Int)
    case string(String)
}
var date = Date.digit(year: 2011, month: 9, day: 10)
date = .string("2011-09-10")
switch date {
case .digit(let year, let month, let day):
    print(year, month, day)
case let .string(value):
    print(value)
}

3. 原始值(Raw Values)

枚举成员可以使用相同类型的默认值预先关联,这个默认值叫做:原始值

// 原始值,不写默认是枚举值
enum Grade: String {
    case perfect = "A"
    case great = "B"
    case good = "C"
    case bad = "D"
}
print(Grade.perfect)
print(Grade.perfect.rawValue)

4. 隐式原始值(Implicitly Assigned Raw Values)

如果枚举的原始值类型是Int、String,Swift会自动分配原始值

enum Season : Int {
    case spring, summer, autumn, winter
}
print(Season.spring.rawValue) // 0
print(Season.summer.rawValue) // 1
print(Season.autumn.rawValue) // 2
print(Season.winter.rawValue) // 3

5. 递归枚举(Recursive Enumeration)

枚举值包含自己枚举,需要使用 indirect 关键字

indirect enum ArithExpr {
case number(Int)
case sum(ArithExpr, ArithExpr)
case difference(ArithExpr, ArithExpr)
}

let five = ArithExpr.number(5)
let four = ArithExpr.number(4)
let two = ArithExpr.number(2)
let sum = ArithExpr.sum(five, four)
let difference = ArithExpr.difference(sum, two) 

6. MemoryLayout

可以使用MemoryLayout获取数据类型占用的内存大小

 enum Password {
    case number(Int, Int, Int, Int)
    case other
}

MemoryLayout<Password>.stride // 40, 分配占用的空间大小 MemoryLayout<Password>.size // 33, 实际用到的空间大小 MemoryLayout<Password>.alignment // 8, 对齐参数

相关文章

网友评论

      本文标题:Swift语法 -- [04 - 枚举]

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