GitHub - CombineCommunity/CombineCocoa: Combine publisher bridges for UIKit
source link: https://github.com/CombineCommunity/CombineCocoa
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
CombineCocoa
CombineCocoa attempts to provide publishers for common UIKit controls so you can consume user interaction as Combine emissions and compose them into meaningful, logical publisher chains.
Note: This is still a primal version of this, with much more to be desired. I gladly accept PRs, ideas, opinions, or improvements. Thank you ! :)
Basic Examples
Check out the Example in the Example folder. Open the project in Xcode 11 and Swift Package Manager should automatically resolve the required dependencies.
Usage
tl;dr:
import Combine import CombineCocoa textField.textPublisher // AnyPublisher<String, Never> segmented.selectedSegmentIndexPublisher // AnyPublisher<Int, Never> slider.valuePublisher // AnyPublisher<Float, Never> button.tapPublisher // AnyPublisher<Void, Never> barButtonItem.tapPublisher // AnyPublisher<Void, Never> switch.isOnPublisher // AnyPublisher<Bool, Never> stepper.valuePublisher // AnyPublisher<Double, Never> datePicker.datePublisher // AnyPublisher<Date, Never> refreshControl.isRefreshingPublisher // AnyPublisher<Bool, Never> pageControl.currentPagePublisher // AnyPublisher<Int, Never> tapGesture.tapPublisher // AnyPublisher<UITapGestureRecognizer, Never> pinchGesture.pinchPublisher // AnyPublisher<UIPinchGestureRecognizer, Never> rotationGesture.rotationPublisher // AnyPublisher<UIRotationGestureRecognizer, Never> swipeGesture.swipePublisher // AnyPublisher<UISwipeGestureRecognizer, Never> panGesture.panPublisher // AnyPublisher<UIPanGestureRecognizer, Never> screenEdgePanGesture.screenEdgePanPublisher // AnyPublisher<UIScreenEdgePanGestureRecognizer, Never> longPressGesture.longPressPublisher // AnyPublisher<UILongPressGestureRecognizer, Never> scrollView.contentOffsetPublisher // AnyPublisher<CGPoint, Never> scrollView.reachedBottomPublisher(offset:) // AnyPublisher<Void, Never>
Installation
CocoaPods
Add the following line to your Podfile:
pod 'CombineCocoa'
Swift Package Manager
Add the following dependency to your Package.swift file:
.package(url: "https://github.com/CombineCommunity/CombineCocoa.git", from: "0.2.1")
Carthage
Add the following to your Cartfile:
github "CombineCommunity/CombineCocoa"
Future ideas
- Support non
UIControl.Event
-based publishers (e.g. delegates). - ... your ideas? :)
Acknowledgments
- CombineCocoa is highly inspired by RxSwift's RxCocoa in its essence, kudos to Krunoslav Zaher for all of his amazing work on this.
- Thanks to Antoine van der Lee for his tutorial on Creating Custom Publishers. The idea to set up a control target inside the publisher was inspired by it.
License
MIT, of course ;-) See the LICENSE file.
The Apple logo and the Combine framework are property of Apple Inc.
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK