引子
在实际项目中经常会遇到一种类似状态机的机制,比如A执行完了再执行B,B执行完了再执行C,C执行完了可能还需要回到A状态。很实际的一个栗子就是商品订单状态,当然实现状态机的方式很多,不过得益于Swift
的牛掰语法糖。enum
变可以很简单的实现这个功能
方式
示意代码如下,代码比较简单,就不过多解释了。
class VC: UIViewController {
enum Step {
case One, Two, Three
mutating func goNext() {
switch self {
case .One:
self = .Two
case .Two:
self = .Three
case .Three:
self = .One
}
}
}
private var step = Step.One
func call1() -> Void {
print("call 1")
}
func call2() -> Void {
print("call 2")
}
func call3() -> Void {
print("call 3")
}
func changeStatus() -> Void {
switch step {
case .One:
self.call1()
case .Two:
self.call2()
case .Three:
self.call3()
}
self.step.goNext()
}
}
let vc = VC()
vc.changeStatus()
vc.changeStatus()
vc.changeStatus()
vc.changeStatus()
输出结果如下
知识点
mutating
Structures and enumerations are value types. By default, the properties of a value type cannot be modified from within its instance methods
意思就是结构体和枚举可以定义自己的方法,默认情况下,实例是不可以修改属性的值。但是但是如果加上mutating
关键词就可以修改了
enum
显然enum
还能干更多的事情,比如关联值等,以后实现项目中遇到再开文
古时有关云长全神贯注下象棋刮骨疗毒,今日有我凌凌漆聚精会神看A片挖骨取弹头。《国产凌凌漆》