测试已验证 | ✓ |
语言语言 | SwiftSwift |
许可证 | MIT |
发布最新版本 | 2017年4月 |
SwiftSwift版本 | 3.1 |
SPM支持SPM | ✗ |
由1amageek维护。
AssemblyLine在后台持续执行多个任务。丢弃执行期间失败的任务。
以特斯拉工厂为例。
定义状态。
enum ModelXStatus: StatusProtocol {
case spec
case assembly
case paint
}
定义错误。
enum ModelXError: Error {
case invalid
}
定义Processable
协议。
class ModelX: Processable {
typealias Status = ModelXStatus
var error: Error?
var id: String
var status: Status
var workItem: DispatchWorkItem?
var isAssembled: Bool = false
var color: UIColor?
init() {
self.id = UUID().uuidString
self.status = .spec
}
// Processing when an error occurs
func dispose(_ error: Error?) {
}
}
struct ModelXPackage: Packageable {
var products: [ModelX]
}
// Define workflow steps
let assembly: Step<ModelX> = Step({ (product) -> ModelX in
product.isAssembled = true
return product
})
// Define workflow steps
let paint: Step<ModelX> = Step({ (product) -> ModelX in
product.color = .white
return product
})
// Making a manufacturing line to do workflow
let line: Line<ModelX, ModelXPackage> = Line(workflow: [assembly, paint])
// Generate 10 ModelX
(0..<10).forEach({ (index) in
let product: ModelX = ModelX()
line.generate(product)
})
// Packaging
line.packing { (products, isStopped) in
if isStopped {
print("Line is stopped")
return
}
let package = ModelXPackage(products: products)
}