繁体   English   中英

如何绑定信号 <Bool, NoError> 在Reactive Cocoa 4中启用UIButton的属性

[英]How to bind Signal<Bool, NoError> to enabled property of UIButton in Reactive Cocoa 4

我有一个非常简单的ReactiveCocoa用例。 在我的设置中,我有两个UITextField和一个UIButton

如果两个文本字段都包含至少一个字符,则按钮的enabled属性应仅设置为true

我开始根据上面提到的条件创建一个发出truefalseSignal<Bool, NoError>

现在,据我所知,我不知何故需要信号(或其值) 绑定到我的按钮的enabled属性。 但我不知道如何做到这一点,超过一个小时的研究没有导致任何结果......

更新:根据我的理解,以前可以使用RAC宏实现: RAC(self.button, enabled) = signal; , 或类似的规定。 但是,这并不能帮助我,因为宏已经在RAC 3.被弃用我的问题是基本相同, 这一个只为RAC 4,而不是3。

这可以使用自定义<~运算符来实现。 但是,它只适用于MutableProperty类型的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 = $0 }, getter: { self.enabled })
    }
}

请注意,此实现取决于Colin Eberhardt创建的这个要点

现在我们可以这样做:

button.rac_enabled <~ signal

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM