2017-03-14 145 views
1

我正在嘗試將我的項目遷移到Swift 3. 我正在使用ReactiveKit和Bond,並且正在努力進行一些轉換。將ReactiveKit從v4.x遷移到v5.x

1)用得最多的,看起來像這樣我的擴展:

extension UIView { 

public var bnd_superview: Observable<UIView?> { 
    return bnd_associatedObservableForValueForKey("superview") 
} 

我找不到什麼bnd_associatedObservableForValueForKey改爲。

2)我有以下代碼:

self.myButton.bnd_selected.next(false) 

應該改爲:

self.myButton.reactive.isSelected.next(false) 

,但我得到了以下錯誤:

Value of type 'Bond' has no member 'next'

回答

0

第一個可更換由Bond類型。您也可以將它作爲ReactiveExtensions擴展名而不是UIView擴展名,因此您可以獲得.reactive前綴。

extension ReactiveExtensions where Base: UIView { 

    public var superview: Bond<UIView?> { 
     return bond { view, superview in 
      view.superview = superview 
     } 
    } 
} 

然後,您可以將一個信號綁定到您的債券。

let view: SafeSignal<UIView> = ... 
view.bind(to: someView.reactive.superview) 

債券不能被觀察到,雖然一樣,沒有辦法去觀察UIView.superview。 KVO可能有效,但UIKit不符合KVO標準。

至於第二個問題,isSelectedBond類型,是的,它沒有方法next。它用於綁定信號。

你應該只是做:

self.myButton.isSelected = false

+0

我有。接下來很多用途在我的應用程序。他們大多數不適合Bool's。 有沒有可用於向Bond添加.next的擴展名? –

+0

你可以做'SafeSignal.just(「abc」)。bind(to:textField.reactive.text)',如果你真的想,你可以把它擴展成一個擴展名。 –