[英]Why RxCocoa didn't provide subscribe for UILabel's text change?
RxCocoa 提供订阅UITextField
和UITextView
文本更改:
UITextField().rx.text.orEmpty.changed
.subscribe { text in
print(text)
}
.disposed(by: disposeBag)
UITextView().rx.text.changed.subscribe { t in
print(t)
}.disposed(by: disposeBag)
但UILabel
不方便:
UILabel().rx.text.subscribe ...
为什么 rxcocoa 是为此而设计的?
本质上, text
方法是 UIControl 的addTarget(:action:for:)
方法的包装。 它将该方法变成了可观察的东西。
UILabel
类型不是从UIControl
派生的,因此没有addTarget(:action:for:)
方法。 您不能将@IBAction 附加到普通@IBAction
中的 UILabel,因此您也不能将 Rx ControlProperty 附加到 UILabel。
就像在 UIKit 中一样,您不需要观察 UILabel 的更改,因为它更改的唯一方法是您的代码更改了它。 只需观察触发 label 发生变化的事情。
如果您查看代码将有助于理解... text
方法只是value
方法的重命名:
public var text: ControlProperty<String?> {
value
}
value
方法是一个监控“默认事件”的 ControlProperty。
public var value: ControlProperty<String?> {
return base.rx.controlPropertyWithDefaultEvents(
查看controlPropertyWithDefaultEvents
,我们可以找出默认事件是什么:
internal func controlPropertyWithDefaultEvents<T>(
editingEvents: UIControl.Event = [.allEditingEvents, .valueChanged],
getter: @escaping (Base) -> T,
setter: @escaping (Base, T) -> Void
) -> ControlProperty<T>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.