[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-6673":3},{"id":4,"name":5,"fullName":6,"owner":5,"repo":5,"description":7,"homepage":8,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":15,"stars7d":16,"stars30d":17,"stars90d":15,"forks30d":15,"starsTrendScore":15,"compositeScore":18,"rankGlobal":9,"rankLanguage":9,"license":19,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":20,"hasPages":20,"topics":22,"createdAt":9,"pushedAt":9,"updatedAt":26,"readmeContent":27,"aiSummary":28,"trendingCount":15,"starSnapshotCount":15,"syncStatus":29,"lastSyncTime":30,"discoverSource":31},6673,"ReactiveCocoa","ReactiveCocoa\u002FReactiveCocoa","Cocoa framework and Obj-C dynamism bindings for ReactiveSwift.","",null,"Swift",19836,3419,814,4,0,1,3,45,"MIT License",false,"master",[23,24,25],"reactivecocoa","reactiveswift","swift","2026-06-12 02:01:28","\u003Cp align=\"center\">\n\t\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FReactiveCocoa\u002FReactiveCocoa\u002F\">\u003Cimg src=\"Logo\u002FPNG\u002Flogo.png\" alt=\"ReactiveCocoa\" \u002F>\u003C\u002Fa>\u003Cbr \u002F>\u003Cbr \u002F>\n\tReactive extensions to Cocoa frameworks, built on top of \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FReactiveCocoa\u002FReactiveSwift\u002F\">ReactiveSwift\u003C\u002Fa>.\u003Cbr \u002F>\u003Cbr \u002F>\n\t\u003Ca href=\"http:\u002F\u002Freactivecocoa.io\u002Fslack\u002F\">\u003Cimg src=\"Logo\u002FPNG\u002FJoinSlack.png\" alt=\"Join the ReactiveSwift Slack community.\" width=\"143\" height=\"40\" \u002F>\u003C\u002Fa>\n\u003C\u002Fp>\n\u003Cbr \u002F>\n\n[![Carthage compatible](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FCarthage-compatible-4BC51D.svg?style=flat)](#carthage) [![CocoaPods compatible](https:\u002F\u002Fimg.shields.io\u002Fcocoapods\u002Fv\u002FReactiveCocoa.svg)](#cocoapods) [![SwiftPM compatible](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FSwiftPM-compatible-orange.svg)](#swift-package-manager) [![GitHub release](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Frelease\u002FReactiveCocoa\u002FReactiveCocoa.svg)](https:\u002F\u002Fgithub.com\u002FReactiveCocoa\u002FReactiveCocoa\u002Freleases) ![Swift 5.1](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FSwift-5.1-orange.svg) ![platforms](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fplatforms-iOS%20%7C%20OS%20X%20%7C%20watchOS%20%7C%20tvOS%20-lightgrey.svg)\n\n⚠️ [Looking for the Objective-C API?][]\n\n🎉 [Migrating from RAC 4.x?][CHANGELOG]\n\n🚄 [Release Roadmap](#release-roadmap)\n\n## What is ReactiveSwift?\n__ReactiveSwift__ offers composable, declarative and flexible primitives that are built around the grand concept of ___streams of values over time___. These primitives can be used to uniformly represent common Cocoa and generic programming patterns that are fundamentally an act of observation.\n\nFor more information about the core primitives, see [ReactiveSwift][].\n\n## What is ReactiveCocoa?\n\n__ReactiveCocoa__ wraps various aspects of Cocoa frameworks with the declarative [ReactiveSwift][] primitives.\n\n1. **UI Bindings**\n\n\tUI components expose [`BindingTarget`][]s, which accept bindings from any\n\tkind of streams of values via the `\u003C~` operator.\n\n\t```swift\n\t\u002F\u002F Bind the `name` property of `person` to the text value of an `UILabel`.\n\tnameLabel.reactive.text \u003C~ person.name\n\t```\n\n\t_Note_: You'll need to import ReactiveSwift as well to make use of the `\u003C~` operator.\n\n1. **Controls and User Interactions**\n\n\tInteractive UI components expose [`Signal`][]s for control events\n\tand updates in the control value upon user interactions.\n\n\tA selected set of controls provide a convenience, expressive binding\n\tAPI for [`Action`][]s.\n\n\n\t```swift\n\t\u002F\u002F Update `allowsCookies` whenever the toggle is flipped.\n\tpreferences.allowsCookies \u003C~ toggle.reactive.isOnValues\n\n\t\u002F\u002F Compute live character counts from the continuous stream of user initiated\n\t\u002F\u002F changes in the text.\n\ttextField.reactive.continuousTextValues.map { $0.characters.count }\n\n\t\u002F\u002F Trigger `commit` whenever the button is pressed.\n\tbutton.reactive.pressed = CocoaAction(viewModel.commit)\n\t```\n\n1. **Declarative Objective-C Dynamism**\n\n\tCreate signals that are sourced by intercepting Objective-C objects,\n\te.g. method call interception and object deinitialization.\n\n\t```swift\n\t\u002F\u002F Notify after every time `viewWillAppear(_:)` is called.\n\tlet appearing = viewController.reactive.trigger(for: #selector(UIViewController.viewWillAppear(_:)))\n\n\t\u002F\u002F Observe the lifetime of `object`.\n\tobject.reactive.lifetime.ended.observeCompleted(doCleanup)\n\t```\n\n1. **Expressive, Safe Key Path Observation**\n\n\tEstablish key-value observations in the form of [`SignalProducer`][]s and\n\t`DynamicProperty`s, and enjoy the inherited composability.\n\n\t```swift\n\t\u002F\u002F A producer that sends the current value of `keyPath`, followed by\n\t\u002F\u002F subsequent changes.\n\t\u002F\u002F\n\t\u002F\u002F Terminate the KVO observation if the lifetime of `self` ends.\n\tlet producer = object.reactive.producer(forKeyPath: #keyPath(key))\n\t\t.take(during: self.reactive.lifetime)\n\n\t\u002F\u002F A parameterized property that represents the supplied key path of the\n\t\u002F\u002F wrapped object. It holds a weak reference to the wrapped object.\n\tlet property = DynamicProperty\u003CString>(object: person,\n\t                                       keyPath: #keyPath(person.name))\n\t```\n\nBut there are still more to be discovered and introduced. Read our in-code documentations and release notes to\nfind out more.\n\n## Getting started\n\nReactiveCocoa supports macOS 10.9+, iOS 8.0+, watchOS 2.0+, and tvOS 9.0+.\n\n#### Carthage\n\nIf you use [Carthage][] to manage your dependencies, simply add\nReactiveCocoa to your `Cartfile`:\n\n```\ngithub \"ReactiveCocoa\u002FReactiveCocoa\" ~> 10.1\n```\n\nIf you use Carthage to build your dependencies, make sure you have added `ReactiveCocoa.framework` and `ReactiveSwift.framework` to the \"_Linked Frameworks and Libraries_\" section of your target, and have included them in your Carthage framework copying build phase.\n\n#### CocoaPods\n\nIf you use [CocoaPods][] to manage your dependencies, simply add\nReactiveCocoa to your `Podfile`:\n\n```\npod 'ReactiveCocoa', '~> 10.1'\n```\n\n#### Swift Package Manager\n\nIf you use Swift Package Manager, simply add ReactiveCocoa as a dependency\nof your package in `Package.swift`:\n\n```\n.package(url: \"https:\u002F\u002Fgithub.com\u002FReactiveCocoa\u002FReactiveCocoa.git\", branch: \"master\")\n```\n\n#### Git submodule\n\n 1. Add the ReactiveCocoa repository as a [submodule][] of your\n    application’s repository.\n 1. Run `git submodule update --init --recursive` from within the ReactiveCocoa folder.\n 1. Drag and drop `ReactiveCocoa.xcodeproj` and `Carthage\u002FCheckouts\u002FReactiveSwift\u002FReactiveSwift.xcodeproj` into your application’s Xcode\n    project or workspace.\n 1. On the “General” tab of your application target’s settings, add\n    `ReactiveCocoa.framework` and `ReactiveSwift.framework` to the “Embedded Binaries” section.\n 1. If your application target does not contain Swift code at all, you should also\n    set the `EMBEDDED_CONTENT_CONTAINS_SWIFT` build setting to “Yes”.\n\n## Have a question?\nIf you need any help, please visit our [GitHub issues][] or [Stack Overflow][]. Feel free to file an issue if you do not manage to find any solution from the archives.\n\n## Release Roadmap\n**Current Stable Release:**\u003Cbr \u002F>[![GitHub release](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Frelease\u002FReactiveCocoa\u002FReactiveCocoa.svg)](https:\u002F\u002Fgithub.com\u002FReactiveCocoa\u002FReactiveCocoa\u002Freleases)\n\n### In Development\n### Plan of Record\n#### ABI stability release\nReactiveCocoa is expected to declare library ABI stability when Swift rolls out resilience support in Swift 5. Until then, ReactiveCocoa will incrementally adopt new language features.\n\n[ReactiveSwift]: https:\u002F\u002Fgithub.com\u002FReactiveCocoa\u002FReactiveSwift\n[ReactiveObjC]: https:\u002F\u002Fgithub.com\u002FReactiveCocoa\u002FReactiveObjC\n[GitHub issues]: https:\u002F\u002Fgithub.com\u002FReactiveCocoa\u002FReactiveCocoa\u002Fissues?q=is%3Aissue+label%3Aquestion+\n[Stack Overflow]: http:\u002F\u002Fstackoverflow.com\u002Fquestions\u002Ftagged\u002Freactive-cocoa\n[CHANGELOG]: CHANGELOG.md\n[Carthage]: https:\u002F\u002Fgithub.com\u002FCarthage\u002FCarthage\n[CocoaPods]: https:\u002F\u002Fcocoapods.org\u002F\n[submodule]: https:\u002F\u002Fgit-scm.com\u002Fbook\u002Fen\u002Fv2\u002FGit-Tools-Submodules\n[Looking for the Objective-C API?]: https:\u002F\u002Fgithub.com\u002FReactiveCocoa\u002FReactiveObjC\n[Still using Swift 2.x?]: https:\u002F\u002Fgithub.com\u002FReactiveCocoa\u002FReactiveCocoa\u002Ftree\u002Fv4.0.0\n[`Signal`]: https:\u002F\u002Fgithub.com\u002FReactiveCocoa\u002FReactiveSwift\u002Fblob\u002Fmaster\u002FDocumentation\u002FFrameworkOverview.md#signals\n[`SignalProducer`]: https:\u002F\u002Fgithub.com\u002FReactiveCocoa\u002FReactiveSwift\u002Fblob\u002Fmaster\u002FDocumentation\u002FFrameworkOverview.md#signal-producers\n[`Action`]: https:\u002F\u002Fgithub.com\u002FReactiveCocoa\u002FReactiveSwift\u002Fblob\u002Fmaster\u002FDocumentation\u002FFrameworkOverview.md#actions\n[`BindingTarget`]: https:\u002F\u002Fgithub.com\u002FReactiveCocoa\u002FReactiveSwift\u002Fblob\u002Fmaster\u002FDocumentation\u002FFrameworkOverview.md#properties\n","ReactiveCocoa 是一个基于 ReactiveSwift 构建的 Cocoa 框架扩展，旨在为 iOS、macOS、watchOS 和 tvOS 平台提供响应式编程支持。该项目的核心功能包括 UI 绑定、控件和用户交互处理以及声明式的 Objective-C 动态特性。通过使用 `BindingTarget` 和 `Signal` 等原语，开发者能够以简洁且声明式的方式实现视图与数据模型之间的双向绑定，并轻松处理用户输入事件。此外，它还允许创建基于方法调用拦截等行为的信号流，从而增强应用程序的灵活性和可维护性。ReactiveCocoa 适用于需要构建复杂交互逻辑或希望采用响应式架构提高代码质量的各类 Apple 生态系统下的应用开发场景。",2,"2026-06-11 03:08:14","top_language"]