我目前正在使用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(_:)))
}
}
我想使用合并框架实现上面代码中的方法。
2条答案
按热度按时间31moq8wy1#
是的,可以为用C2C-C编写的方法重现该功能。用自定义实现(可能会调用,也可能不会调用原始方法定义)替换一个C2C方法的技术通常被称为“Monkey Patching”或“Method Swizzling”,你可以通过Google找到这样做的技术。下面是一个示例:
https://nshipster.com/method-swizzling/
要用合并实现同样的功能,您可能会使用
PassthroughSubject
,它将类型擦除到AnyPublisher
,并在每次调用该方法时将替换的X1 m2n1x方法的值传递给主题。dffbzjpn2#
似乎有人提出了一个解决办法:https://swiftpack.co/package/chorim/CombineInterception。
这样你就可以将它添加到你的项目中:
和
import CombineInterception
,因此您可以调用类似于然而,这只是一个分叉的回购,尚未正式合并到CombineCocoa中。如果你不担心真实性,你可以将包添加到你的项目中,或者只是将repo克隆到你的项目中,直到这个实现得到CombineCocoa的正式认可。