[英]How to bind Signal<Bool, NoError> to enabled property of UIButton in Reactive Cocoa 4
我有一個非常簡單的ReactiveCocoa
用例。 在我的設置中,我有兩個UITextField
和一個UIButton
。
如果兩個文本字段都包含至少一個字符,則按鈕的enabled
屬性應僅設置為true
。
我開始根據上面提到的條件創建一個發出true
或false
的Signal<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.