1

我正在尝试将我的项目迁移到 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)

但我收到以下错误:

“债券”类型的值没有成员“下一个”

4

1 回答 1

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

于 2017-03-14T12:04:10.227 回答