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-syntax
compilation, 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 CombineInterception
It's a good idea to add a separate macros target to your library as well
// Exports.swift
@_exported import CombineInterceptionMacros
You 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.