我有一个非常简单的用例 ReactiveCocoa
.在我的设置中,我有两个 UITextField
s和一个UIButton
.
按钮的 enabled
属性应仅设置为 true
当且仅当两个文本字段都包含至少一个字符。
我开始创建一个 Signal<Bool, NoError>
发出 true
或 false
取决于上述条件。
现在,据我所知,我需要以某种方式将信号(或其值)绑定(bind)到 enabled
我的按钮的属性。但我不知道该怎么做,一个多小时的研究没有得出任何结果......
更新:
据我了解,这以前可以使用 RAC
来实现宏:RAC(self.button, enabled) = signal;
, 或类似的规定。但这对我没有帮助,因为宏在 RAC 3 中已被弃用。我的问题基本上与 this one 相同。仅适用于 RAC 4 而不是 3。
最佳答案
这可以使用自定义 <~
来实现运算符(operator)。但是,它仅适用于 MutableProperty
类型的属性, 所以我们不能只做以下事情:
let signal: <Bool, NoError> = ...
button.enabled <~ signal
相反,我们需要包装按钮的 enabled
MutableProperty
中的属性(property)像这样:
extension UIButton {
public var rac_enabled: MutableProperty<Bool> {
return lazyMutableProperty(self, key: &AssociationKey.text, setter: { self.enabled = $0 }, getter: { self.enabled })
}
}
请注意,此实现取决于此 gist这是由 Colin Eberhardt 创建的.
现在我们可以做:
button.rac_enabled <~ signal
关于ios - 如何将 Signal<Bool, NoError> 绑定(bind)到 Reactive Cocoa 4 中 UIButton 的启用属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34188400/