ReactiveKit从v4.x迁移到v5.x.

时间:2017-03-14 11:16:06

标签: ios swift3 reactivekit swiftbond

我正在尝试将我的项目迁移到Swift 3。 我正在使用ReactiveKit和Bond,我正在努力进行一些转换。

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)

但是我收到以下错误:

  

'Bond'类型的值没有成员'next'

1 个答案:

答案 0 :(得分: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。

至于第二个问题,isSelected的类型为Bond,是的,它没有方法next。它用于绑定信号。

你应该这样做:

self.myButton.isSelected = false