如果我经常做一些更改,那么在使用我想发送的字段执行表单时
let initialOrChangedName = Signal.merge(
nameChanged.signal,
self.viewDidLoadProperty.signal
.map { _ in nil }
)
private let nameChangedProperty = MutableProperty<String?>(nil)
private let viewDidLoadProperty = MutableProperty(())
获取一个在加载时触发一次的信号,这样当用户点击一个按钮时,我就可以在CombineTest中使用它,这个按钮将向服务器触发一个表单值为的web请求。由于此信号合并,它将给出初始值之后更改的所有值,允许我在用户点击提交按钮时发送最新值
Signal.combineLatest(intialOrChangedName, initialOrChangedAge)
.sample(on:sendButtonTappedProperty.signal)
如果值发送为零,我只是不把它们包含在web请求中,但是如果用户更改了其中的一些值,我会得到其他值。
因为这是一个相当常见的模式,所以我想将其推广到一个函数,例如
let initialOrChangedName = nameChanged.initialOrChangedState(on: viewDidLoadProperty)
我试过写
extension MutableProperty where Value: OptionalProtocol {
public func initialOrChangedState(on viewDidLoadProperty: MutableProperty<Void>) -> Signal<Value?, Error> {
return Signal.merge(self.signal.map(Optional.init),
viewDidLoadProperty.signal.map { _ in nil})
}
}
在纸上看起来不错,但会返回字符串??对于给定的示例,和不起作用。
我也试着把它写成信号的静态函数,但没有成功。