機能的な反応型プログラミングでは、できるだけ多くの代理人の使用を取り除いています。デリゲートクラスにMutableProperty
を追加すると少しステートフルなようです。 MutablePropertiesは、ステートレスパラダイムとステートフルパラダイムの間のブリッジの一種です。
これはどういう意味ですか?
物事が変わったときにイベントを処理するために使用する代理人を作成する代わりに。イベントを信号として観察し、イベントに反応する方法を見つける。おそらく一例が分かりやすいでしょう。
はあなたが提示されているモーダルビューを持っていると言う、と
提示コントローラは、
提示ビューコントローラのデリゲートです。あなたは、その後...モーダルにいくつかの点で提示コントローラ(もちろん、すべてのデリゲートプロトコルのものを示していない)
func allDone() {
self.delegate?.modalComplete()
}
FRPの道
を
func showModal() {
let modalVC = ModalViewController()
modalVC.delegate = self
self.presentModalViewController(modalVC, animated: true)
}
func modalComplete() {
self.dismissViewControllerAnimated(true, completion: nil)
print("All Done with Modal.")
}
を提示するコントローラを渡します
代理人パターンをFRPに変更すると、次のような結果になります。
func showModal() {
let modalVC = ModalViewController()
modalVC.completionSignal
.startWithNext { [weak self] _ in
self.modalComplete()
}
self.presentModalViewController(modalVC, animated: true)
}
func modalComplete() {
self.dismissViewControllerAnimated(true, completion: nil)
print("All Done with the FRP Modal.")
}
あなたのモーダルでは、モーダルを閉じるときに何かを送ることができる信号を作成します。
let (completionSignal, completionObserver) = SignalProducer<String, NoError>.buffer(1)
func allDone() {
completionObserver.sendNext("Whatever you want")
completionObserver.sendComplete()
}
希望します。デリゲートとFRPの両方との作業が混乱する可能性があります.RAC4について私が一番気に入っていることの1つは、この面倒なパターンを置き換える能力です。
また
let (completionSignal, completionObserver) = Signal<String, NoError>.pipe()
などのモーダルビューコントローラに定義し、そしてちょうど親ビューコントローラ上でそれを観察するのではなく起動し、それを観察することによって、真のSignal
ではなくSignalProducer
を使用することができます。