我翻譯的RAC4的文檔:
ReactiveCocoa 4 官方文檔翻譯
ReactiveCocoa 4 文檔翻譯:基本操作符(一)
ReactiveCocoa 4 文檔翻譯:基本操作符(二)
ReactiveCocoa 4 文檔翻譯:框架組成介紹
ReactiveCocoa 4 文檔翻譯:兼容Objective-C
ReactiveCocoa 4 文檔翻譯--設(shè)計(jì)指南(一):事件的規(guī)范
ReactiveCocoa 4 文檔翻譯:設(shè)計(jì)指南(二):信號(hào)的規(guī)范
[翻譯]ReactiveCocoa 4 最佳實(shí)踐
從RAC 3.0引入全新的設(shè)計(jì)時(shí),也考慮和RAC2的最大兼容性,好讓升級不會(huì)那么痛苦。可以通過RAC提供的橋接函數(shù)將OC的類型轉(zhuǎn)換成swift類型來調(diào)用RAC2的API。
因?yàn)楹蚏AC2的底層設(shè)計(jì)完全不同,轉(zhuǎn)換并不總是能做到一一對應(yīng),但是我們保證了兩個(gè)框架的核心概念是一致的。
轉(zhuǎn)換的類型有:
- RACSignal 和 SignalProducer、 Signal
- RACCommand 和 Action
- RACScheduler 和 SchedulerType
- RACDisposable 和 Disposable
對如果要查詢?nèi)康臉蚪覣PI,查看這個(gè)文件: ObjectiveCBridging.swift
。如果要查看怎么從RAC2升級,查看這份文檔:CHANGELOG.
RACSignal 和 SignalProducer、 Signal
在RAC3后,冷信號(hào)表示為<code> SignalProducer </code>類型,熱信號(hào)表示表示為<code> Signal </code>類型。
冷信號(hào)<code> RACSignal </code>可以通過<code> toSignalProducer </code>方法轉(zhuǎn)換為<code> SignalProducer </code>。
<pre><code>
extension RACSignal {
func toSignalProducer() -> SignalProducer<AnyObject?, NSError>
}
</code></pre>
熱的<code> RACSignal </code>不能直接轉(zhuǎn)換成<code> Signal </code>,因?yàn)镽ACSignal的訂閱者可能有副作用。如果要獲得Signal,使用<code> RACSignal.toSignalProducer </code>,接著調(diào)用<code> SignalProducer.start </code>,可以顯性的發(fā)現(xiàn)潛在的副作用。
其他情況下下,用<code> toRACSignal() </code>函數(shù)。
當(dāng)用SignalProducer調(diào)用時(shí),這些函數(shù)會(huì)創(chuàng)建一個(gè)RACSignal,然后為每個(gè)訂閱者調(diào)用一次<code>start()</code>:
<pre><code>
func toRACSignal<T: AnyObject, E>(producer: SignalProducer<T, E>) -> RACSignal
func toRACSignal<T: AnyObject, E>(producer: SignalProducer<T?, E>) -> RACSignal
</code></pre>
當(dāng)用Signal調(diào)用時(shí),這些函數(shù)會(huì)創(chuàng)建一個(gè)RACSignal,然后只是簡單的觀察它:
<pre><code>
func toRACSignal<T: AnyObject, E>(signal: Signal<T, E>) -> RACSignal
func toRACSignal<T: AnyObject, E>(signal: Signal<T?, E>) -> RACSignal
</code></pre>
RACCommand 和 Action
要將<code>RACCommand</code>轉(zhuǎn)換為新的<code> Action </code>類型,使用<code>toAction()</code>擴(kuò)展方法:
<pre><code>
extension RACCommand {
func toAction() -> Action<AnyObject?, AnyObject?, NSError>
}
</code></pre>
使用<code>toRACCommand()</code>函數(shù)將<code>Action</code>轉(zhuǎn)換為<code>RACCommand</code>:
<pre><code>
func toRACCommand<Output: AnyObject, E>(action: Action<AnyObject, Output, E>) -> RACCommand
func toRACCommand<Output: AnyObject, E>(action: Action<AnyObject?, Output, E>) -> RACCommand
</code></pre>
注意:action和command的<code> executing </code>屬性不會(huì)通過通過橋接API同步。
RACScheduler 和 SchedulerType
每個(gè)<code> RACScheduler </code>實(shí)例都會(huì)自動(dòng)轉(zhuǎn)為<code> DateSchedulerType </code>(<code> SchedulerType </code>的一種類型),可以在函數(shù)方法里自由傳遞。
有些RAC的<code> SchedulerType </code>類型不能轉(zhuǎn)為<code> RACScheduler </code>實(shí)例,使用<code> toRACScheduler() </code>方法:
<pre><code>
extension ImmediateScheduler {
func toRACScheduler() -> RACScheduler
}
extension UIScheduler {
func toRACScheduler() -> RACScheduler
}
extension QueueScheduler {
func toRACScheduler() -> RACScheduler
}
</code></pre>
RACDisposable 和 Disposable
每個(gè)<code> RACDisposable </code>實(shí)例都會(huì)自動(dòng)轉(zhuǎn)為<code> Disposable </code>,可以在要求是<code> RACDisposable </code>類型的地方直接使用。
雖然不能自動(dòng)把Disposable轉(zhuǎn)換為RACDisposable,但是可以手動(dòng)輕松實(shí)現(xiàn):
<pre><code>
let swiftDisposable: Disposable
let objcDisposable = RACDisposable {
swiftDisposable.dispose()
}
</code></pre>
歡迎關(guān)注我的微博:@沒故事的卓同學(xué)