美文网首页
Swift3.0---如何通过enum实现状态机

Swift3.0---如何通过enum实现状态机

作者: 亼仐 | 来源:发表于2016-12-09 15:03 被阅读50次

引子

在实际项目中经常会遇到一种类似状态机的机制,比如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片挖骨取弹头。《国产凌凌漆》

相关文章

  • Swift3.0---如何通过enum实现状态机

    引子 在实际项目中经常会遇到一种类似状态机的机制,比如A执行完了再执行B,B执行完了再执行C,C执行完了可能还需要...

  • <转> 通过枚举 enum 来实现单例模式

    转自:通过枚举 enum 来实现单例模式 枚举 通过enum关键字来实现枚举,在枚举中需要注意的有: 枚举中的属性...

  • 枚举

    一、概念: 实例有限而且固定的类,在java里被称为枚举类。 二、通过enum实现枚举类 使用enum定义的枚举类...

  • Spring StateMachine状态机引擎在项目中的应用(

    说明 前面基本上涵盖了一个项目中配置简单状态机的相关实现,不过还有一个关键点,就是外部代码如何调用状态机,以及如何...

  • SpringStateMachine之七-外部调用&事务

    说明 前面基本上涵盖了一个项目中配置简单状态机的相关实现,不过还有一个关键点,就是外部代码如何调用状态机,以及如何...

  • swift--Optional

    Optioanl 是通过 enum 实现的⼀个⾮常好的代表,这⾥我们可以通过阅读 Optional 的源码来看⼀下...

  • Swift底层探索:Optional

    在Optional.Swift源码中,Optional定义如下。 Optional是通过enum实现的,Optio...

  • CocosCreator3.x开发笔记4:enum和const

    enum实际是通过在立即执行函数内进行两次双向的赋值实现的const enum编译后并没有相关代码const en...

  • Android StateMachine学习

    在看蓝牙源码的时候,发现蓝牙的连接状态以及绑定状态是通过StateMachine(状态机)来实现的。通过State...

  • Swift-Optional&Equatable&访问控制权限

    Optional Optional是通过enum实现的一个非常好的代表,这里我们可以通过阅读Optional的源码...

网友评论

      本文标题:Swift3.0---如何通过enum实现状态机

      本文链接:https://www.haomeiwen.com/subject/ajwemttx.html