ReactiveX / RxSwift

iOSのリアクティブプログラミングのライブラリ。
https://github.com/ReactiveX/RxSwift

リアクティブプログラミングは、C#で以前試していますが、Swiftで動かしたことがありませんでした。iOSの開発を再々開した関係で試してみました。
「Reactive Extensions for Unity」

Reactive Extensions for Unity

「Reactive Extensions」
http://crossframe.iiv.jp/201604021188/
「C# LINQのクエリ式」
http://crossframe.iiv.jp/20130503247/

最初に関心をもったのは10年くらい前のようですが(Blogって思いだせるのでいいですね)、新しい技術の入れ替わりが激しいITの業界にあっても、すたることなくどんどん使わるようになってきました。

プログラムは、3つのスライダの値の平均値を表示するものです。

Bidirectional Operator(<->)がコードを見やすくしています。(双方向のバインド)
https://github.com/ReactiveX/RxSwift/blob/main/RxExample/RxExample/Operators.swift
3つ目のスライダはあえてこれを使わずに書いてみました。

実機でテストしましたが、3本の指で同時にスライダを操作できるところが、あらためて便利に感じます。

スライダの値を取得する関数を書かなくていいので、RxSwiftでコードが見やすくなることを実感できました。
最近ストリーム系の処理をメソッドチェーンで書くことをよく見かけるようになりましたが、ちょっと前まではコーディング規約みたいなものがある現場では、お行儀がわるいとされていたこともあります。(jQueryなどのJavaScriptライブラリのこのようなコードが見にくいなどど言われた。無名関数でないと書けない処理もある)
データバインディング以外にも非同期処理コールバックの取得結果を次々につないでする処理にも使われますが、C#のReactiveExtensionのように、タイミングでイベントを分けるようなより高度な利用方法など、活用の幅は広いと感じます。