Combine API for interception of objc selectors in Swift.
Observe selectors on NSObject instances
navigationController.intercept(_makeMethodSelector( selector: UINavigationController.popViewController, signature: navigationController.popViewController )) .sink { result in print(result.args) // `animated` flag print(result.output) // popped `UIViewController?` }You can also simplify creating method selector with CombineInterceptionMacros if you are open for macros
navigationController.intercept( #methodSelector(UINavigationController.popViewController) ).sink { result in print(result.args) // `animated` flag print(result.output) // popped `UIViewController?` }Macros require
swift-syntaxcompilation, so it will affect cold compilation time
If you use it to create a library it may be a good idea to export this one implicitly
// Exports.swift @_exported import CombineInterceptionIt's a good idea to add a separate macros target to your library as well
// Exports.swift @_exported import CombineInterceptionMacrosYou can add CombineInterception to an Xcode project by adding it as a package dependency.
- From the File menu, select Swift Packages › Add Package Dependency…
- Enter
"https://github.com/capturecontext/combine-interception.git"into the package repository URL text field - Choose products you need to link them to your project.
If you use SwiftPM for your project, you can add CombineInterception to your package file.
.package( url: "https://github.com/capturecontext/combine-interception.git", .upToNextMinor(from: "0.3.0") )Do not forget about target dependencies:
.product( name: "CombineInterception", package: "combine-interception" ).product( name: "CombineInterceptionMacros", package: "combine-interception" )This library is released under the MIT license. See LICENCE for details.
See ACKNOWLEDGMENTS for inspiration references and their licences.