CombineCommunity/CombineCocoa
Combine publisher bridges for UIKit
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.
<p align="center"><img src="https://github.com/freak4pc/CombineCocoa/raw/main/Resources/example.gif"></p>
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.
Package Metadata
Repository: CombineCommunity/CombineCocoa
Stars: 1741
Forks: 140
Open issues: 26
Default branch: main
Primary language: swift
License: MIT
Topics: hacktoberfest
README: README.md