红石 0.4.0

红石 0.4.0

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最后发布2017年10月
SwiftSwift版本4.0
SPM支持SPM

nixzhu维护。



红石 0.4.0

红石有一个状态机。

要求

Swift 4,iOS 8

(Swift 3,请使用版本0.3.0)

示例

如果你的房间有灯,你可以打开或关闭它。如果你想剪断电线,它会损坏。

Lights

我们可以定义状态和转换来描述状态机

import Redstone

class Lights {
    enum State: Int {
        case off
        case on
        case broken
    }
    enum Transition: Int {
        case turn
        case cut
    }
    lazy var stateMachine: StateMachine<State, Transition> = {
        let stateMachine = StateMachine<State, Transition>()
        stateMachine.add(state: .off) {
            print("Lights off")
        }
        stateMachine.add(state: .on) {
            print("Lights on")
        }
        stateMachine.add(state: .broken) {
            print("Lights broken")
        }
        stateMachine.add(transition: .turn, fromState: .off, toState: .on)
        stateMachine.add(transition: .turn, fromState: .on, toState: .off)
        stateMachine.add(transition: .cut, fromStates: [.on, .off], toState: .broken)
        return stateMachine
    }()
}

我们创建了一个灯,将其初始状态设置为关闭。

let lights = Lights()
lights.stateMachine.initialState = .off

现在你可以从关闭切换到打开,或者从打开切换到关闭

lights.stateMachine.fire(transition: .turn)

或者剪断电线

lights.stateMachine.fire(transition: .cut)

它将无法再次打开。

如果您愿意,可以运行演示来感受一下。

联系方式

NIX @nixzhu

许可证

红石受MIT许可证约束。有关更多信息,请参阅LICENSE文件。