gpt4 book ai didi

swift - 无法推断通用参数 'A'(从 Swift 2 迁移的 Swift 4、Bond 和 ReactiveKit 框架)

转载 作者:行者123 更新时间:2023-11-28 15:17:55 26 4
gpt4 key购买 nike

伙计们!我正在尝试从 Swift 2 迁移到 Swift 4。项目正在使用 Bond 和 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 有错误: Generic parameter 'A' could not be inferred .这很奇怪,因为我检查了我的"dispatch"的值是什么:(for: Selector, dispatch: (PublishSubject< S, NoError>, A, B) -> R) .

我尝试使用多个变量进行调度,但一无所获。在我看来,Xcode 无法识别在 PublishSubject 参数之后开始的任何变量。

我想知道我做错了什么。

最佳答案

如果您曾经从旧版本的 ReactiveKit/Bond 实现语法迁移,这里是如何为您的 UIKit Reactive Extensions 做的:

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)
}
}

关于swift - 无法推断通用参数 'A'(从 Swift 2 迁移的 Swift 4、Bond 和 ReactiveKit 框架),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46531319/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com