枚举类型

  1. 枚举的简单使用
    1. 枚举,结构体,类的名字要大写
    2. 它的名字可以被推断,所以第二次赋值时候之间可以省略枚举的名字。
enum Direction {
    case north
    case south
    case east
    case west
}

var direction = Direction.north
direction = .east

  1. 关联值枚举
enum Barcode {
    case upc(Int, Int, Int)
    case qrCode(String)
}

var aBarcode = Barcode.upc(1,2,3)
aBarcode = .qrCode("afdsagfadsfd")
switch aBarcode {
case let .upc(a, b, c):
    print("a:\(a)  b:\(b)  c:\(c)")
case let .qrCode(str):
    print(str)
}
  1. 原始值
    1. 原始值就是一开始定义时候要进行赋值
    2. 原始值有赋值,所以必须写明类型
    3. 原始值是不会变的,而关联值是以后可以改变的。
enum ASCIICode: Character {
    case tab = "\t"
    case lineFeed = "\n"
    case carriageReturn = "\r"
}
var a = ASCIICode.tab
a = .lineFeed

switch a {
case .tab:
    print("tab")
case .lineFeed:
    print("lineFeed")
case .carriageReturn:
    print("carriageReturn")
}
  1. 原始值的隐式赋值
enum Num: Int {
    case a = 1,b,c,d,e,f,g
}

enum Direction: String {
   case north, south, east, west
}

print(Num.c.rawValue)
print(Direction.east.rawValue)
  1. 通过原始值查找枚举项
enum Num: Int {
    case a = 1,b,c,d,e,f,g
}

enum Direction: String {
   case north, south, east, west
}

if let a = Num(rawValue: 10) {
    print(a)
}else{
    print("nil")
}
  1. 递归枚举
    递归枚举要在enum前边写上indirect
indirect enum express {
    case num(Int)
    case add(express, express)
    case multi(express, express)
}

func getValue(exp: express) -> Int{
    switch exp {
    case let .num(a):
        print("1-------")
        return a
    case let .add(a, b):
        print("2-------")
        return getValue(exp: a) + getValue(exp: b)
    case let .multi(a, b):
        print("3-------")
        return getValue(exp: a) * getValue(exp: b)
    }
}

var temp = express.num(4)
print("temp = \(temp)")
var temp1 = express.num(5)
print("temp1 = \(temp1)")
var sum = express.add(temp, temp1)
print("sum = \(sum)")
var value = express.multi(sum, express.num(3))
print("value = \(value)")
print(getValue(exp: value))
  1. 枚举的原始值类型
    1. 支持整数型(Int),小数型(Float,Double)字串类型(String)字符型(Character),默认是Int类型。
    2. 其中Int,Float,Double,String类型都支持自动赋原始值。但是字符型(Character)不支持。
//字符串型原始值(自动赋原始值)
enum test: String {
    case tab
    case lineFeed
    case carriageReturn
    case t
}

var a = test.t
print("自动赋值 字符串型原始值:\(a)---\(a.rawValue)")

//整形原始值(自动赋原始值)
enum test1: Int {
    case tab
    case lineFeed
    case carriageReturn
    case t
}

var b = test1.t
print("自动赋值 整型原始值:\(b)---\(b.rawValue)")

//小数原始值 (自动赋值)
enum test2: Float {
    case tab
    case lineFeed
    case carriageReturn
    case t
}

var c = test2.t
print("自动赋值 整型原始值:\(c)---\(c.rawValue)")

//字符原始值 (不能自动赋值!)
enum test3: Character {
    case a = "a"
    case b = "b"
    case c = "c"
    case t = "t"
}

var d = test3.t
print("自动赋值 整型原始值:\(d)---\(d.rawValue)")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值