首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法推断泛型参数'A‘(Swift 4、键和ReactiveKit框架从Swift 2迁移)

无法推断泛型参数'A‘(Swift 4、键和ReactiveKit框架从Swift 2迁移)
EN

Stack Overflow用户
提问于 2017-10-02 18:15:28
回答 1查看 176关注 0票数 0

伙计们!我正在尝试从Swift 2迁移到Swift 4,项目使用的是邦德和ReactiveKit框架。我有UISearchBar的分机。因此,我面临着一个从这里迁移的问题:

代码语言:javascript
复制
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 }
        )
    }
}

我已经做了一些修改,并对此代码进行了修改:

代码语言:javascript
复制
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参数之后没有识别任何变量。

我想知道我做错了什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-09 06:55:53

如果您曾经从ReactiveKit/Bond实现语法的旧版本迁移,下面是如何为您的UIKit反应性扩展进行迁移:

代码语言:javascript
复制
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)
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46531319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档