【问题标题】:RxSwift Delegate Binding isn't Generated?未生成 RxSwift 委托绑定?
【发布时间】:2020-02-03 07:19:28
【问题描述】:

我正在尝试绑定一个委托,这就是我们所做的

/** Delegate Proxy **/
func castOrThrow<T>(_ resultType: T.Type, _ object:Any) throws -> T {
    guard let returnValue = object as? T else {
        throw RxCocoaError.castingError(object: object, targetType: resultType)
    }
    return returnValue
}
@objc
public protocol TestEventGeneratorDelegate:class {
    @objc optional func asyncEventResult(int:Int)
}
open class TestEventGenerator {
    public var delegate: TestEventGeneratorDelegate?
    func asyncCall() {
        DispatchQueue.global().asyncAfter(deadline: .now() + .seconds(1)) { [weak self] in
            guard let self = self else  { return }
            self.delegate?.asyncEventResult!(int: 0)
        }
    }
}
extension TestEventGenerator: HasDelegate {
    public typealias Delegate = TestEventGeneratorDelegate
}
open class RxTestDelegateProxy : DelegateProxy<TestEventGenerator,TestEventGeneratorDelegate>,
                                DelegateProxyType,
                                TestEventGeneratorDelegate {
    public weak private(set) var testGenerator: TestEventGenerator?
    public init(testEventGenerator: ParentObject) {
        self.testGenerator = testEventGenerator
        super.init(parentObject: testEventGenerator, delegateProxy: RxTestDelegateProxy.self)
    }
    public static func registerKnownImplementations() {
        self.register { RxTestDelegateProxy(testEventGenerator: $0) }
    }
}
extension Reactive where Base: TestEventGenerator {
    public var delegate: DelegateProxy<TestEventGenerator, TestEventGeneratorDelegate> {
        return RxTestDelegateProxy.proxy(for: base)
    }
    public var asyncEventResult: Observable<Int> {
        let source =  delegate.methodInvoked(#selector(TestEventGeneratorDelegate.asyncEventResult(int:)))
        .map { (a) in
            return try castOrThrow(Int.self,a[0])
        }
        return source
    }
}
/**  Delegate Proxy **/

然后当我使用它时

let testEventGenerator = TestEventGenerator()
textEventGenerator.rx.asyncEventResult.subscribe.... // subscribe here no rx found? 
testEventGenerator.asyncCall() // call and wait for the observable to return to the delegate 

它没有编译并说没有这样的rx

我必须绑定它,因为编写 API 的人没有使用回调来返回值,而是使用委托。

这是他如何编写代码以及我想如何包装它的示例。

有没有办法绑定需要从 asyncCall() 启动的委托?

所以我可以使用 flatmapLatest 以 promiseLike 的方式链接它?

谢谢告知!

我遵循了这些教程: How to convert Delegate to Observable RxSwift?https://blog.ippon.fr/2018/11/13/rxswift-how-to-make-your-favorite-delegate-based-apis-reactive/

【问题讨论】:

    标签: rx-swift rx-cocoa


    【解决方案1】:

    符合 TestEventGenerator:ReactiveCompatible 并且会修复它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-04
      • 1970-01-01
      • 1970-01-01
      • 2016-09-08
      • 2015-10-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多