如何绑定 Signal<Bool, NoError> 以启用 属性 of UIButton in Reactive Cocoa 4
How to bind Signal<Bool, NoError> to enabled property of UIButton in Reactive Cocoa 4
我有一个非常简单的 ReactiveCocoa
用例。在我的设置中,我有两个 UITextField
和一个 UIButton
。
按钮的 enabled
属性 仅应设置为 true
,前提是两个文本字段至少包含一个字符。
我开始创建一个 Signal<Bool, NoError>
,它根据上述条件发出 true
或 false
。
现在,据我所知,我需要以某种方式绑定 信号(或其值)到我按钮的enabled
属性。但我不知道该怎么做,一个多小时的研究没有得出任何结果……
更新:
据我所知,这以前可以使用 RAC
宏来实现:RAC(self.button, enabled) = signal;
,或者类似的东西。但这对我没有帮助,因为宏在 RAC 3 中已被弃用。我的问题基本上与 相同,仅适用于 RAC 4 而不是 3。
这可以使用自定义 <~
运算符来实现。但是,它只适用于 MutableProperty
类型的属性,因此我们不能只执行以下操作:
let signal: <Bool, NoError> = ...
button.enabled <~ signal
相反,我们需要将按钮的 enabled
属性 包裹在 MutableProperty
中,如下所示:
extension UIButton {
public var rac_enabled: MutableProperty<Bool> {
return lazyMutableProperty(self, key: &AssociationKey.text, setter: { self.enabled = [=11=] }, getter: { self.enabled })
}
}
请注意,此实现取决于此 gist which was created by Colin Eberhardt。
现在我们可以做:
button.rac_enabled <~ signal
我有一个非常简单的 ReactiveCocoa
用例。在我的设置中,我有两个 UITextField
和一个 UIButton
。
按钮的 enabled
属性 仅应设置为 true
,前提是两个文本字段至少包含一个字符。
我开始创建一个 Signal<Bool, NoError>
,它根据上述条件发出 true
或 false
。
现在,据我所知,我需要以某种方式绑定 信号(或其值)到我按钮的enabled
属性。但我不知道该怎么做,一个多小时的研究没有得出任何结果……
更新:
据我所知,这以前可以使用 RAC
宏来实现:RAC(self.button, enabled) = signal;
,或者类似的东西。但这对我没有帮助,因为宏在 RAC 3 中已被弃用。我的问题基本上与
这可以使用自定义 <~
运算符来实现。但是,它只适用于 MutableProperty
类型的属性,因此我们不能只执行以下操作:
let signal: <Bool, NoError> = ...
button.enabled <~ signal
相反,我们需要将按钮的 enabled
属性 包裹在 MutableProperty
中,如下所示:
extension UIButton {
public var rac_enabled: MutableProperty<Bool> {
return lazyMutableProperty(self, key: &AssociationKey.text, setter: { self.enabled = [=11=] }, getter: { self.enabled })
}
}
请注意,此实现取决于此 gist which was created by Colin Eberhardt。
现在我们可以做:
button.rac_enabled <~ signal