开发中难免遇到很多种状态, 我接手过好几个项目使用的是 if else
判断
一般这么写:
if status == 1 {
} else if status == 2 {
} else if status == 3 {
} else {
}
当我看到的时候, 我会先去楼道抽支红塔山
enum
是专为多状态准备的, 配合 switch case
使用, 请把它用起来
Swift
支持多种枚举值类型
如果某个状态是以
String
类型返回的, 我们定义模型的时候也可以写成enum
, 在json
转模型的时候该状态已经转成枚举值, 在业务场景使用的时候不用来回查接口文档在OC中 枚举值类型默认是int, 不做赘述
在Swift中就好用多了
如果服务端返回整形:
// 1: 男性
// 2: 女性
// 3: 未知
// 那我们的枚举可以这么写:
enum SexIntType: Int {
case male = 1// 男性
case female = 2 // 女性
case unknown = 3 // 未知
}
- 如果服务端返回字符串:
// "男": 男性
// "女": 女性
// "未知": 未知
// 那我们的枚举可以这么写:
enum SexStringType: String {
case male = "男"// 男性
case female = "女" // 女性
case unknown = "未知" // 未知
}
场景一
- 设想这样一种场景:
产品要求我们如果是男性, 给用户展示: '靓仔'两个字; 如果是女性, 给用户展示: '美女'两个字, 如果用户不愿意透漏性别, 那么展示: '秘密'两个字 - 在Swift中可以给枚举定义属性, 如下:
enum SexIntType: Int {
case male = 1// 男性
case female = 2 // 女性
case unknown = 3 // 未知
// 展示文本
var showSexText: String {
switch self {
case .male:
return "靓仔"
case .female:
return "美女"
case .unknown:
return "秘密"
}
}
}
实际使用:
struct TestEnum {
var sex = SexIntType.unknown
init() {
// 展示的文本
let sexLableText = sex.showSexText
print(sexLableText)
}
}
// log: 秘密
场景二: 枚举可以声明函数, 且可以改变自身枚举值
一个按钮的多种状态
比如:
- 抖音目前版本的视频播放速度按钮
- 网易云音乐的单曲循环/循环播放/列表播放按钮
- 一个灯有暖色/亮色/冷色三种颜色的生活常见现象
以上都是一个按钮控制了多种状态
- 使用
Swift enum
代码实现第三种情况:
// 一个日常生活中的现象
// 客厅灯有三种颜色
// 按第一下: 暖色
// 按第二下: 亮色
// 按第三下: 冷色
// 按第四下: 关灯
// 再按一下: 暖色
// .
// .
// .
// 按第四下: 关灯
// 以此循环
// 每一次按钮会产生四种顺序状态 1: 暖色 2: 亮色 3: 冷色 4: 关闭
enum Light {
case warm
case bright
case cool
case close
// 想要改变枚举的值, 则func 必须标记为 mutating
mutating func turnOnTheLights() {
switch self {
case .warm:
self = .bright
case .bright:
self = .cool
case .cool:
self = .close
case .close:
self = .warm
}
}
}
实际使用:
class ButtonView: UIView {
// 灯
var light = Light.close
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
// 按钮点击事件
@objc func lightAction() {
light.turnOnTheLights()
print(light)
// 打印结果
/**
warm
bright
cool
close
warm
bright
cool
close
.
.
.
cool
close
*/
}
}
各位: 多状态请使用enum
下一篇聊聊enum
高级使用的一些场景