簡體   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