ReactiveCocoa 4 文檔翻譯:兼容Objective-C

原文:Objective-C Bridging

我翻譯的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é)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容