Swift-8(枚举)

每日一句:

精彩的人生总有精彩的理由,笑到最后的才会笑得最甜!

微笑.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)(欢迎👏关注❤️)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容