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