Swift-8(枚举)
2020-07-15 本文已影响0人
雨亦有种执着
每日一句:
精彩的人生总有精彩的理由,笑到最后的才会笑得最甜!
微笑.jpg一、定义
- 枚举为一组相关的值定义了一个共同的类型,使你可以在你的代码中以类型安全的方式来使用这些值。
- 在swift中枚举是一等类型
- 枚举使用enum
- 与OC不同的是,swift的枚举创建的时候,不会被默认赋予整数型
二、格式
enum 枚举名称 {
//定义
}
事例:
//创建一个枚举
enum frameRect {
case x
case y
case width
case height
}
//多个枚举可以写成一行,用逗号隔开
enum frameRectTwo {
case x,y,width,height
}
var size = frameRect.x
//在swift中可以自动推断其类型
size = .width
//枚举可以使用swicth语句来匹配
switch size {
case .x:
print("X")
case .y:
print("Y")
case .width:
print("width")
case .height:
print("height")
}
三、枚举的遍历
- 有些情况,你需要得到包含枚举成员的集合,这是需要枚举遵循CaseIterable协议
事例:
// TODO: 得到枚举内成员的集合
enum name:CaseIterable {
case jone,king,bob
}
let names = name.allCases
print(names.first!)
四、关联值
- Swift 枚举来存储任意类型的关联值
事例:
// TODO: 关联值
enum person {
case name(String,String)
case size(Int,Float,Float)
}
var king = person.name("king", "K")
king = .size(18, 190, 110)
print(king)
五、递归枚举
- 递归枚举是一种枚举类型,它有一个或多个枚举成员使用该枚举类型的实例作为关联值
- 枚举成员前加上 indirect 来表示该成员可递归
- 枚举前加上 indirect 来表示该枚举所有成员可递归
事例:
// TODO: 递归枚举 indirect
enum caluNum {
case num(Int)
indirect case addNum(caluNum,caluNum)
indirect case reduceNum(caluNum,caluNum)
}
//所有枚举成员可递归
indirect enum caluAllNum {
case num(Int)
case addNum(caluNum,caluNum)
case reduceNum(caluNum,caluNum)
}
let one = caluNum.num(1)
let two = caluNum.num(2)
let sum = caluNum.addNum(one, two)
let reduce = caluNum.reduceNum(two, caluNum.num(1))
func pritCaluNum(_ printNum:caluNum) -> Int {
switch sum {
case let .num(value):
return value
case let .addNum(left, right):
return pritCaluNum(left) + pritCaluNum(right)
case let .reduceNum(leftNum, rightNum):
return pritCaluNum(leftNum) - pritCaluNum(rightNum)
}
}
print(pritCaluNum(reduce))
gitHub地址:(https://github.com/kingbroad/SwiftStudy)(欢迎👏关注❤️)