Swift 债券框架 - 多对一关系 - 如果有任何变化则触发单个命令
Swift Bond framework - many to one relationship - trigger a single command if anything changes
考虑以下示例:
给定一组可观察值:
let value1 = Observable(false)
let value2 = Observable(false)
let value3 = Observable(false)
let isSaveButtonEnabled = Observable(false)
我想在每次发生变化时执行这段代码:
func validate() {
{...}
isSaveButtonEnabled.value = true
}
目前,配置这种关系的唯一方法是为每个 Observable 单独添加一个闭包:
value1.onNext {
self.validate()
}
value2.onNext {
self.validate()
}
....
目标:
我想使用与此类似的语法对其进行编程:
[value1, value2, value.....].onAnyChange {
self.validate()
}
我想到的东西:
private func configureValidationLogic() {
[vaule1.eraseType(),
vaule2.eraseType(),
vaule3.eraseType(),
vaule4.eraseType(),
vaule5.eraseType()].forEach { (signal) in
signal.observeNext { [weak self] in
guard let self = self else {return}
self.validate()
}
}
}
也许,有更好的方法(built-in 进入库)实现相同的目的。
考虑以下示例:
给定一组可观察值:
let value1 = Observable(false)
let value2 = Observable(false)
let value3 = Observable(false)
let isSaveButtonEnabled = Observable(false)
我想在每次发生变化时执行这段代码:
func validate() {
{...}
isSaveButtonEnabled.value = true
}
目前,配置这种关系的唯一方法是为每个 Observable 单独添加一个闭包:
value1.onNext {
self.validate()
}
value2.onNext {
self.validate()
}
....
目标:
我想使用与此类似的语法对其进行编程:
[value1, value2, value.....].onAnyChange {
self.validate()
}
我想到的东西:
private func configureValidationLogic() {
[vaule1.eraseType(),
vaule2.eraseType(),
vaule3.eraseType(),
vaule4.eraseType(),
vaule5.eraseType()].forEach { (signal) in
signal.observeNext { [weak self] in
guard let self = self else {return}
self.validate()
}
}
}
也许,有更好的方法(built-in 进入库)实现相同的目的。