伙计们!我正在尝试从Swift 2迁移到Swift 4,项目使用的是邦德和ReactiveKit框架。我有UISearchBar的分机。因此,我面临着一个从这里迁移的问题:
import UIKit
import Bond
import ReactiveKit
public extension UISearchBar {
public var bnd_delegate: ProtocolProxy {
return protocolProxy(for: UISearchBarDelegate.self, setter: NSSelectorFromString("setDelegate:"))
}
}
public extension UISearchBar {
public var bnd_text: DynamicSubject<UISearchBar, String?> {
let dispatcher: (PublishSubject<Void, NoError>, UISearchBar, String) -> Void = { _ in }
let selector = #selector(UISearchBarDelegate.searchBar(_:textDidChange:))
return DynamicSubject(
target: self,
signal: bnd_delegate.signal(for: selector, dispatch: dispatcher),
get: { $0.text },
set: { $0.text = $1 }
)
}
}我已经做了一些修改,并对此代码进行了修改:
import UIKit
import Bond
import ReactiveKit
public extension UISearchBar {
public var delegate: ProtocolProxy {
return protocolProxy(for: UISearchBarDelegate.self, setter: NSSelectorFromString("setDelegate:"))
}
public var text: DynamicSubject<String?> {
let dispatcher: (PublishSubject<Void, NoError>, UISearchBar, String) -> Void = { _,_,_ in }
let selector = #selector(UISearchBarDelegate.searchBar(_:textDidChange:))
return DynamicSubject<String?>(
target: self,
signal: delegate.signal(for: selector, dispatch: dispatcher),
get: { $0.text },
set: { $0.text = $1 }
)
}
}目前,我在使用DynamicSubject:无法推断泛型参数'A‘时出错。这很奇怪,因为我检查了我的“分派”作为值的值是什么:(for: Selector, dispatch: (PublishSubject< S, NoError>, A, B) -> R)。
我试过处理调度变量的数量,但一无所获。在我看来,Xcode在PublishSubject参数之后没有识别任何变量。
我想知道我做错了什么。
发布于 2017-10-09 06:55:53
如果您曾经从ReactiveKit/Bond实现语法的旧版本迁移,下面是如何为您的UIKit反应性扩展进行迁移:
import UIKit
import Bond
import ReactiveKit
extension ReactiveExtensions where Base: UISearchBar {
var delegate: ProtocolProxy {
return base.protocolProxy(for: UISearchBarDelegate.self, setter: NSSelectorFromString("setDelegate:"))
}
var text: DynamicSubject<String?> {
let selector = #selector(UISearchBarDelegate.searchBar(_:textDidChange:))
let textChanged = delegate.signal(for: selector) { (subj: SafePublishSubject<Void>, _: UISearchBar, _: NSString) in
subj.next(())
}
return dynamicSubject(
signal: textChanged,
get: { $0.text },
set: { $0.text = $1 }
)
}
}
extension UISearchBar: BindableProtocol {
public func bind(signal: SafeSignal<String?>) -> Disposable {
return reactive.text.bind(signal: signal)
}
}https://stackoverflow.com/questions/46531319
复制相似问题