Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

Reactive Programming in Swift

License

NotificationsYou must be signed in to change notification settings

ReactiveX/RxSwift

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RxSwift Logo
Build StatusSupported Platforms: iOS, macOS, tvOS, watchOS & Linux

Rx is ageneric abstraction of computation expressed throughObservable<Element> interface, which lets you broadcast and subscribe to values and other events from anObservable stream.

RxSwift is the Swift-specific implementation of theReactive Extensions standard.

RxSwift Observable Example of a price constantly changing and updating the app's UI

While this version aims to stay true to the original spirit and naming conventions of Rx, this project also aims to provide a true Swift-first API for Rx APIs.

Cross platform documentation can be found onReactiveX.io.

Like other Rx implementations, RxSwift's intention is to enable easy composition of asynchronous operations and streams of data in the form ofObservable objects and a suite of methods to transform and compose these pieces of asynchronous work.

KVO observation, async operations, UI Events and other streams of data are all unified underabstraction of sequence. This is the reason why Rx is so simple, elegant and powerful.

I came here because I want to ...

... understand
... install
... hack around
... interact
... compare
... understand the structure

RxSwift is as compositional as the asynchronous work it drives. The core unit is RxSwift itself, while other dependencies can be added for UI Work, testing, and more.

It comprises five separate components depending on each other in the following way:

┌──────────────┐    ┌──────────────┐│   RxCocoa    ├────▶   RxRelay    │└───────┬──────┘    └──────┬───────┘        │                  │┌───────▼──────────────────▼───────┐│             RxSwift              │└───────▲──────────────────▲───────┘        │                  │┌───────┴──────┐    ┌──────┴───────┐│    RxTest    │    │  RxBlocking  │└──────────────┘    └──────────────┘
  • RxSwift: The core of RxSwift, providing the Rx standard as (mostly) defined byReactiveX. It has no other dependencies.
  • RxCocoa: Provides Cocoa-specific capabilities for general iOS/macOS/watchOS & tvOS app development, such as Shared Sequences, Traits, and much more. It depends on bothRxSwift andRxRelay.
  • RxRelay: ProvidesPublishRelay,BehaviorRelay andReplayRelay, threesimple wrappers around Subjects. It depends onRxSwift.
  • RxTest andRxBlocking: Provides testing capabilities for Rx-based systems. It depends onRxSwift.

Usage

Here's an exampleIn Action
Define search for GitHub repositories ...
let searchResults = searchBar.rx.text.orEmpty    .throttle(.milliseconds(300), scheduler: MainScheduler.instance)    .distinctUntilChanged()    .flatMapLatest { query -> Observable<[Repository]> in        if query.isEmpty {            return .just([])        }        return searchGitHub(query)            .catchAndReturn([])    }    .observe(on: MainScheduler.instance)
... then bind the results to your tableview
searchResults    .bind(to: tableView.rx.items(cellIdentifier: "Cell")) {        (index, repository: Repository, cell) in        cell.textLabel?.text = repository.name        cell.detailTextLabel?.text = repository.url    }    .disposed(by: disposeBag)

Installation

RxSwift doesn't contain any external dependencies.

These are currently the supported installation options:

Manual

Open Rx.xcworkspace, chooseRxExample and hit run. This method will build everything and run the sample app

# Podfileuse_frameworks!target'YOUR_TARGET_NAME'dopod'RxSwift','6.9.0'pod'RxCocoa','6.9.0'end# RxTest and RxBlocking make the most sense in the context of unit/integration teststarget'YOUR_TESTING_TARGET'dopod'RxBlocking','6.9.0'pod'RxTest','6.9.0'end

ReplaceYOUR_TARGET_NAME and then, in thePodfile directory, type:

$ pod install

XCFrameworks

Each release starting with RxSwift 6 includes*.xcframework framework binaries.

Simply drag the needed framework binaries to yourFrameworks, Libraries, and Embedded Content section under your target'sGeneral tab.

XCFrameworks instructions

Tip

You may verify the identity of the binaries by comparing against the following fingerprint in Xcode 15+:

BD 80 2E 79 4C 8A BD DA 4C 3F 5D 92 B3 E4 C4 FB FA E4 73 44 10 B9 AD 73 44 2E F1 CE B0 27 61 40

XCFrameworks Signature Fingerprint in Xcode 15+

Add this toCartfile

github "ReactiveX/RxSwift" "6.9.0"
$ carthage update

Carthage as a Static Library

Carthage defaults to building RxSwift as a Dynamic Library.

If you wish to build RxSwift as a Static Library using Carthage you may use the script below to manually modify the framework type before building with Carthage:

carthage update RxSwift --platform iOS --no-buildsed -i -e's/MACH_O_TYPE = mh_dylib/MACH_O_TYPE = staticlib/g' Carthage/Checkouts/RxSwift/Rx.xcodeproj/project.pbxprojcarthage build RxSwift --platform iOS

Note: There is a critical cross-dependency bug affecting many projects including RxSwift in Swift Package Manager. We'vefiled a bug (SR-12303) in early 2020 but have no answer yet. Your mileage may vary. A partial workaround can be foundhere.

Create aPackage.swift file.

// swift-tools-version:5.0import PackageDescriptionletpackage=Package(  name:"RxProject",  dependencies:[.package(url:"https://github.com/ReactiveX/RxSwift.git",.upToNextMajor(from:"6.0.0"))],  targets:[.target(name:"RxProject", dependencies:["RxSwift",.product(name:"RxCocoa",package:"RxSwift")]),])
$ swift build

To build or test a module with RxTest dependency, setTEST=1.

$ TEST=1 swifttest

Manually using git submodules

  • Add RxSwift as a submodule
$ git submodule add git@github.com:ReactiveX/RxSwift.git
  • DragRx.xcodeproj into Project Navigator
  • Go toProject > Targets > Build Phases > Link Binary With Libraries, click+ and selectRxSwift,RxCocoa andRxRelay targets

References


[8]ページ先頭

©2009-2025 Movatter.jp