A fork of CombineCocoa that adds AppKit support.
CombineCocoa attempts to provide publishers for common AppKit and 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 ! :)
Check out the Example in the Example folder. Open the project in Xcode 11 and Swift Package Manager should automatically resolve the required dependencies.
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>
Add the following line to your Podfile:
pod 'CombineCocoa'
Add the following dependency to your Package.swift file:
.package(url: "https://github.com/CombineCommunity/CombineCocoa.git", from: "0.2.1")
Add the following to your Cartfile:
github "CombineCommunity/CombineCocoa"
- Support non
UIControl.Event
-based publishers (e.g. delegates). - ... your ideas? :)
- 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.
MIT, of course ;-) See the LICENSE file.
The Apple logo and the Combine framework are property of Apple Inc.