问题描述
因此,我想创建一个顺序重要的构建器。但是,我不想让呼叫者担心该命令的顺序。
class myClass {
private var a: Bool
private var b: Bool
private var c: Bool
init() {
a = false
b = false
c = false
}
func build() { // enforces order
if a {
// build a
}
if b {
// build b
}
if c {
// build c
}
return
}
func setA() -> myClass {
a = true
return self
}
func setB() -> myClass {
b = true
return self
}
func setC() -> myClass {
c = true
return self
}
}
这是我当前的解决方案。这样,呼叫者无需关心订单。构建函数将处理订单。这就是我想要的。但是我的问题是,我可以不使用布尔值来做到这一点吗?有没有更干净的解决方案来实现相同的目的?
解决方法
一种解决方案是改用数组来跟踪应该执行的操作。从您的代码中,我认为可以将每个部分完成的工作视为一个不带参数并返回Void的函数,因此我创建了该函数类型的数组,每个setX函数都会在正确的索引处将相应的函数添加到该数组中,然后函数以它们在数组中出现的顺序被调用。
using
示例
xyz