如何在合并框架中实现rxswift的方法调用功能

2w3rbyxf  于 2023-10-15  发布在  Swift
关注(0)|答案(2)|浏览(107)

我目前正在使用rxswift,但正在研究合并框架。
我在rxswift中使用了很多methodlogked函数。
是否可以在合并框架中创建类似于方法的功能?

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(_:)))
    }
}

我想使用合并框架实现上面代码中的方法。

31moq8wy

31moq8wy1#

是的,可以为用C2C-C编写的方法重现该功能。用自定义实现(可能会调用,也可能不会调用原始方法定义)替换一个C2C方法的技术通常被称为“Monkey Patching”或“Method Swizzling”,你可以通过Google找到这样做的技术。下面是一个示例:
https://nshipster.com/method-swizzling/
要用合并实现同样的功能,您可能会使用PassthroughSubject,它将类型擦除到AnyPublisher,并在每次调用该方法时将替换的X1 m2n1x方法的值传递给主题。

dffbzjpn

dffbzjpn2#

似乎有人提出了一个解决办法:https://swiftpack.co/package/chorim/CombineInterception
这样你就可以将它添加到你的项目中:

.package(url: "https://github.com/edudo-inc/CombineCocoa.git", from: "0.2.1")

import CombineInterception,因此您可以调用类似于

viewController.publisher(for: #selector(UIViewController.viewDidLoad))

然而,这只是一个分叉的回购,尚未正式合并到CombineCocoa中。如果你不担心真实性,你可以将包添加到你的项目中,或者只是将repo克隆到你的项目中,直到这个实现得到CombineCocoa的正式认可。

相关问题