{"id":15032411,"url":"https://github.com/combinecommunity/combinecocoa","last_synced_at":"2025-05-15T02:08:21.876Z","repository":{"id":37627569,"uuid":"200361670","full_name":"CombineCommunity/CombineCocoa","owner":"CombineCommunity","description":"Combine publisher bridges for UIKit","archived":false,"fork":false,"pushed_at":"2024-08-21T04:00:44.000Z","size":1476,"stargazers_count":1706,"open_issues_count":27,"forks_count":135,"subscribers_count":29,"default_branch":"main","last_synced_at":"2025-05-12T22:54:14.137Z","etag":null,"topics":["hacktoberfest"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CombineCommunity.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-08-03T10:20:16.000Z","updated_at":"2025-05-12T16:00:36.000Z","dependencies_parsed_at":"2023-02-19T16:45:46.486Z","dependency_job_id":"576d9b3f-f5fc-4fa3-9068-53867bd75d23","html_url":"https://github.com/CombineCommunity/CombineCocoa","commit_stats":{"total_commits":54,"total_committers":19,"mean_commits":"2.8421052631578947","dds":0.4444444444444444,"last_synced_commit":"7300c75ff9e072aa7fd0fccefcc88f74aae9bf56"},"previous_names":["freak4pc/combinecocoa"],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CombineCommunity%2FCombineCocoa","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CombineCommunity%2FCombineCocoa/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CombineCommunity%2FCombineCocoa/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CombineCommunity%2FCombineCocoa/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CombineCommunity","download_url":"https://codeload.github.com/CombineCommunity/CombineCocoa/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254259384,"owners_count":22040820,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hacktoberfest"],"created_at":"2024-09-24T20:18:19.699Z","updated_at":"2025-05-15T02:08:21.806Z","avatar_url":"https://github.com/CombineCommunity.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CombineCocoa\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/freak4pc/CombineCocoa/raw/main/Resources/logo.png\" width=\"45%\"\u003e\n\u003cbr /\u003e\u003cbr /\u003e\n\u003ca href=\"https://actions-badge.atrox.dev/CombineCommunity/CombineCocoa/goto\" target=\"_blank\" alt=\"Build Status\" title=\"Build Status\"\u003e\u003cimg src=\"https://github.com/CombineCommunity/CombineCocoa/workflows/CombineCocoa/badge.svg?branch=main\" alt=\"Build Status\" title=\"Build Status\"\u003e\u003c/a\u003e\u003cbr /\u003e\n\u003ca href=\"https://cocoapods.org/pods/CombineCocoa\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/cocoapods/v/CombineCocoa.svg?1\" alt=\"CombineCocoa supports CocoaPods\"\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/apple/swift-package-manager\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/Swift%20Package%20Manager-compatible-brightgreen.svg\" alt=\"CombineCocoa supports Swift Package Manager (SPM)\"\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/Carthage/Carthage\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat\" alt=\"CombineCocoa supports Carthage\"\u003e\u003c/a\u003e\n\u003cbr /\u003e\n\u003cimg src=\"https://img.shields.io/badge/platforms-iOS%2013.0-333333.svg\" /\u003e\n\u003c/p\u003e\n\nCombineCocoa 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.\n\n**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 ! :)\n\n## Basic Examples\n\nCheck out the [Example in the **Example** folder](https://github.com/freak4pc/CombineCocoa/blob/main/Example/Example/ControlsViewController.swift#L27). Open the project in Xcode 11 and Swift Package Manager should automatically resolve the required dependencies.\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"https://github.com/freak4pc/CombineCocoa/raw/main/Resources/example.gif\"\u003e\u003c/p\u003e\n\n## Usage\n\ntl;dr: \n\n```swift\nimport Combine\nimport CombineCocoa\n\ntextField.textPublisher // AnyPublisher\u003cString, Never\u003e\nsegmented.selectedSegmentIndexPublisher // AnyPublisher\u003cInt, Never\u003e\nslider.valuePublisher // AnyPublisher\u003cFloat, Never\u003e\nbutton.tapPublisher // AnyPublisher\u003cVoid, Never\u003e\nbarButtonItem.tapPublisher // AnyPublisher\u003cVoid, Never\u003e\nswitch.isOnPublisher // AnyPublisher\u003cBool, Never\u003e\nstepper.valuePublisher // AnyPublisher\u003cDouble, Never\u003e\ndatePicker.datePublisher // AnyPublisher\u003cDate, Never\u003e\nrefreshControl.isRefreshingPublisher // AnyPublisher\u003cBool, Never\u003e\npageControl.currentPagePublisher // AnyPublisher\u003cInt, Never\u003e\ntapGesture.tapPublisher // AnyPublisher\u003cUITapGestureRecognizer, Never\u003e\npinchGesture.pinchPublisher // AnyPublisher\u003cUIPinchGestureRecognizer, Never\u003e\nrotationGesture.rotationPublisher // AnyPublisher\u003cUIRotationGestureRecognizer, Never\u003e\nswipeGesture.swipePublisher // AnyPublisher\u003cUISwipeGestureRecognizer, Never\u003e\npanGesture.panPublisher // AnyPublisher\u003cUIPanGestureRecognizer, Never\u003e\nscreenEdgePanGesture.screenEdgePanPublisher // AnyPublisher\u003cUIScreenEdgePanGestureRecognizer, Never\u003e\nlongPressGesture.longPressPublisher // AnyPublisher\u003cUILongPressGestureRecognizer, Never\u003e\nscrollView.contentOffsetPublisher // AnyPublisher\u003cCGPoint, Never\u003e\nscrollView.reachedBottomPublisher(offset:) // AnyPublisher\u003cVoid, Never\u003e\n```\n\n## Installation\n\n### CocoaPods\n\nAdd the following line to your **Podfile**:\n\n```rb\npod 'CombineCocoa'\n```\n\n### Swift Package Manager\n\nAdd the following dependency to your **Package.swift** file:\n\n```swift\n.package(url: \"https://github.com/CombineCommunity/CombineCocoa.git\", from: \"0.2.1\")\n```\n\n### Carthage\n\nAdd the following to your **Cartfile**:\n\n```\ngithub \"CombineCommunity/CombineCocoa\"\n```\n\n## Future ideas \n\n* Support non `UIControl.Event`-based publishers (e.g. delegates).\n* ... your ideas? :)\n\n## Acknowledgments\n\n* CombineCocoa is highly inspired by RxSwift's [RxCocoa](https://github.com/ReactiveX/RxSwift) in its essence, kudos to [Krunoslav Zaher](https://twitter.com/KrunoslavZaher) for all of his amazing work on this.\n* Thanks to [Antoine van der Lee](https://twitter.com/twannl) for his tutorial on [Creating Custom Publishers](https://www.avanderlee.com/swift/custom-combine-publisher/). The idea to set up a control target inside the publisher was inspired by it.\n\n## License\n\nMIT, of course ;-) See the [LICENSE](LICENSE) file. \n\nThe Apple logo and the Combine framework are property of Apple Inc.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcombinecommunity%2Fcombinecocoa","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcombinecommunity%2Fcombinecocoa","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcombinecommunity%2Fcombinecocoa/lists"}