未生成 RxSwift 委托绑定?
Posted
技术标签:
【中文标题】未生成 RxSwift 委托绑定?【英文标题】:RxSwift Delegate Binding isn't Generated? 【发布时间】: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/
【问题讨论】:
【参考方案1】:符合 TestEventGenerator:ReactiveCompatible 并且会修复它。
【讨论】:
以上是关于未生成 RxSwift 委托绑定?的主要内容,如果未能解决你的问题,请参考以下文章
使用 RxSwift 将 UITableViewCell 中的控件绑定到 ViewModel 的最佳实践
如何在 RxSwift 中将 UISwitch 绑定到 UIButton 启用?
当委托字段不被称为 `delegate` 时实现 `DelegateProxy` (RxSwift/RxCocoa)