如何在combine框架中实现rxswift的methodInvoked函数

问题描述 投票:0回答:1

我目前正在使用 rxswift,但正在研究组合框架。

我在 rxswift 中经常使用 methodInvoked 函数。

是否可以在combine框架中创建类似methodInvoked方法的功能?

public extension Reactive where Base: UIViewController {
    var viewWillAppear: Observable<[Any]> {
        return methodInvoked(#selector(UIViewController.viewWillAppear(_:)))
    }
    
    var viewDidAppear: Observable<[Any]> {
        return methodInvoked(#selector(UIViewController.viewDidAppear(_:)))
    }
    
    var viewDidDisappear: Observable<[Any]> {
        return methodInvoked(#selector(UIViewController.viewDidDisappear(_:)))
    }
    
    var viewWillDisappear: Observable<[Any]> {
        return methodInvoked(#selector(UIViewController.viewWillDisappear(_:)))
    }
}

我想使用combine框架实现像上面代码一样的methodInvoked函数。

swift xcode rx-swift combine
1个回答
0
投票

是的,可以为用 Objective-C 编写的方法重现该功能。用自定义实现(可能会或可能不会调用原始方法定义)替换 Objective-C 方法的技术通常称为“Monkey Patching”或“Method Swizzling”,您可以通过 Google 找到这样做的技术。这是一个例子:

https://nshipster.com/method-swizzling/

要使用组合实现相同的功能,您可能会使用将类型擦除为

PassthroughSubject
AnyPublisher
,并在每次调用该方法时让您的替代 Objective-C 方法
send
为主题提供一个值。

© www.soinside.com 2019 - 2024. All rights reserved.