ReactiveSwift:如何观察 UIView isHidden?
ReactiveSwift: How to observe UIView isHidden?
我想显示 B
UIView iff A
UIView 可见。我在objective-c中使用了ReactiveCocoa 2,并试图在ReactiveSwift
中找到类似的方法来观察UIView的isHidden
属性。我仍在尝试学习框架及其用法,但无法想出一个好的解决方案。如果有人能给我建议,我将不胜感激。
这是来自 ReactiveSwift readme 的 KVO 示例:
// A producer that sends the current value of `keyPath`, followed by
// subsequent changes.
//
// Terminate the KVO observation if the lifetime of `self` ends.
let producer = object.reactive.values(forKeyPath: #keyPath(key))
.take(during: self.reactive.lifetime)
所以在你的情况下你可以做这样的事情(还没有真正尝试过这段代码,但它应该传达了这个想法):
viewA.reactive.values(forKeyPath: #keyPath(isHidden))
.take(during: self.reactive.lifetime)
.startWithValues { hidden in viewB.isHidden = hidden }
更新:
刚刚注意到ReactiveCocoa includes a binding target for UIView`s isHidden property,所以你其实可以把上面的代码简化为:
viewB.reactive.isHidden <~ viewA.reactive.values(forKeyPath: #keyPath(isHidden))
请注意,使用 <~
时不再需要 take(during:)
,因为 <~
自动将绑定源的处置与绑定目标的生命周期联系起来。
我想显示 B
UIView iff A
UIView 可见。我在objective-c中使用了ReactiveCocoa 2,并试图在ReactiveSwift
中找到类似的方法来观察UIView的isHidden
属性。我仍在尝试学习框架及其用法,但无法想出一个好的解决方案。如果有人能给我建议,我将不胜感激。
这是来自 ReactiveSwift readme 的 KVO 示例:
// A producer that sends the current value of `keyPath`, followed by
// subsequent changes.
//
// Terminate the KVO observation if the lifetime of `self` ends.
let producer = object.reactive.values(forKeyPath: #keyPath(key))
.take(during: self.reactive.lifetime)
所以在你的情况下你可以做这样的事情(还没有真正尝试过这段代码,但它应该传达了这个想法):
viewA.reactive.values(forKeyPath: #keyPath(isHidden))
.take(during: self.reactive.lifetime)
.startWithValues { hidden in viewB.isHidden = hidden }
更新:
刚刚注意到ReactiveCocoa includes a binding target for UIView`s isHidden property,所以你其实可以把上面的代码简化为:
viewB.reactive.isHidden <~ viewA.reactive.values(forKeyPath: #keyPath(isHidden))
请注意,使用 <~
时不再需要 take(during:)
,因为 <~
自动将绑定源的处置与绑定目标的生命周期联系起来。