Swift实用小册07:枚举的创建、遍历、关联值、原始值
【摘要】 在本章中,你将学会枚举的常见使用方法,包含但不限于枚举的创建、遍历、关联值、原始值和递归。前言和Apple官网或者网上分享的教程类文章不同,我将以实际开发角度讲述Swift语言的一些概念和用法,方便大家更好地学习和掌握Swift语言。这同时也是对自己学习Swift语言过程的知识整理。如有错误,以你为准。我们新建一个PlayGround文件,命名为SwiftEnum。枚举的创建枚举,是具有相同...
在本章中,你将学会枚举的常见使用方法,包含但不限于枚举的创建、遍历、关联值、原始值和递归。
前言
和Apple官网或者网上分享的教程类文章不同,我将以实际开发角度讲述Swift语言的一些概念和用法,方便大家更好地学习和掌握Swift语言。
这同时也是对自己学习Swift语言过程的知识整理。
如有错误,以你为准。
我们新建一个PlayGround文件,命名为SwiftEnum。
枚举的创建
枚举,是具有相同类型的一组值的集合。
在Swift语言实际开发过程中,常常需要事先定义好一组值对应的枚举类型,然后在业务代码中引用。
我们使用enum关键词来创建枚举,而且在Swift语言中,枚举的名称需要大写开头,示例:
//枚举的创建
enum MealTimeName {
case breakfast
case lunch
case afternoonTea
case supper
case nightSnack
}
上述代码中,我们定义了一个MealTime餐段的枚举,我们使用case在这个枚举里定义了5个枚举的成员值。
我们也可以简化代码,示例:
//枚举的创建
enum MealTimeName2 {
case breakfast,lunch,afternoonTea,supper,nightSnack
}
枚举的使用
在实际业务中,枚举常常作为一种类型,用于判断不同值的情况下,需要执行什么动作。
首先,我们定义一个变量,赋予一个初始值,这个值可以来源于枚举。示例:
//枚举的使用
var currentMealTime = MealTimeName.breakfast
当我们声明的变量类型确定的情况下,我们也可以通过省略声明方式和枚举的名称来简化代码,示例:
//枚举的使用
currentMealTime = .breakfast
然后,结合之前章节所学的Switch语句,我们可以匹配枚举的成员值,从而输出不同的结果。示例:
//枚举的使用
currentMealTime = .breakfast
switch currentMealTime {
case .breakfast:
print("吃早餐啦!")
case .lunch:
print("吃午饭啦!")
case .supper:
print("吃晚饭啦!")
default:
print("不是正餐")
}
上述代码中,我们声明了变量currentMealTime当前餐段,默认值为breakfast早餐,然后使用Switch语句匹配currentMealTime对应枚举MealTimeName的成员值,匹配到值后执行操作。因为我们这里不需要匹配所有的值,只需要匹配“正餐”,我们使用default分支来涵盖其他不需要匹配的值。
枚举的遍历
和遍历数组的方法类似,这里用来访问枚举范围的函数为allCases所有成员。但不同的是,在Swift4.2以后,我们的枚举还需要遵循CaseIterable协议,它是用于合成简单枚举类型的allCases 静态属性。示例:
//枚举的遍历
enum MealTimeName3:String,CaseIterable {
case breakfast,lunch,afternoonTea,supper,nightSnack
}
print("\(MealTimeName3.allCases)")
上述代码中,枚举MealTimeName3遵循CaseIterable协议,我们就可以通过allCases访问枚举内的所有成员,我们这里打印输出枚举内的所有成员,结果为“breakfast,lunch,afternoonTea,super,nightSnack”。
枚举的关联值
在枚举定义过程中,如果每个枚举项都有附加的类型信息,即指定枚举的成员的输入类型,我们把这个附加信息叫做关联值。关联值是用来给枚举成员赋予更多信息,从而简化代码的,让代码结构更加清晰。示例:
//枚举的关联值
enum PowerType {
case directload(String)
case joinToken(String, String)
}
class WebViewController: UIViewController {
let powerType: PowerType!
init(powerType: PowerType) {
self.powerType = powerType
super.init(nibName: nil, bundle: nil)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
switch self.powerType {
case .directload(let url):
//直接用url请求网页
break
case .joinToken(let url, let token):
//用url拼接token后再加载网页
break
case .none: break
}
}
}
上述代码中,我们实现了一个app跳转网页的方法,它有两种情况,一是直接跳转,二是拼接token后,再跳转。在PowerType枚举中,我们使用了枚举关联值的方式,directload关联值带有String类型,joinToken关联值带2个String类型。
枚举的原始值
原始值,是为枚举项提供一个默认值。
如果我们需要指定枚举内成员值的类型和值对应的默认值,也可以在定义枚举的时候,给枚举附上类型以及给参数赋原始值。
//枚举的原始值
enum MealTimeType: Int{
case breakfast = 1
case lunch = 2
case afternoonTea = 3
case supper = 4
case nightSnack = 5
}
上述代码中,我们给MealTimeType枚举定义其类型为Int整型,然后枚举内每个参数都赋予值了对应的原始值。定义好了原始值后,我们就可以用枚举项的 rawValue 属性来输出它。
//枚举的原始值
print("MealTimeType.breakfast.rawValue")
print(MealTimeType(rawValue:1))
以上就是本章的全部内容。
快来动手试试吧!
如果本专栏对你有帮助,不妨点赞、评论、关注~
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)