ReactiveCocoa 4 文档翻译:兼容Objective-C

原文:Objective-C Bridging

我翻译的RAC4的文档:
ReactiveCocoa 4 官方文档翻译
ReactiveCocoa 4 文档翻译:基本操作符(一)
ReactiveCocoa 4 文档翻译:基本操作符(二)
ReactiveCocoa 4 文档翻译:框架组成介绍
ReactiveCocoa 4 文档翻译:兼容Objective-C
ReactiveCocoa 4 文档翻译--设计指南(一):事件的规范
ReactiveCocoa 4 文档翻译:设计指南(二):信号的规范
[翻译]ReactiveCocoa 4 最佳实践

从RAC 3.0引入全新的设计时,也考虑和RAC2的最大兼容性,好让升级不会那么痛苦。可以通过RAC提供的桥接函数将OC的类型转换成swift类型来调用RAC2的API。

因为和RAC2的底层设计完全不同,转换并不总是能做到一一对应,但是我们保证了两个框架的核心概念是一致的。

转换的类型有:

  • RACSignal 和 SignalProducer、 Signal
  • RACCommand 和 Action
  • RACScheduler 和 SchedulerType
  • RACDisposable 和 Disposable

对如果要查询全部的桥接API,查看这个文件: ObjectiveCBridging.swift
。如果要查看怎么从RAC2升级,查看这份文档:CHANGELOG.

RACSignal 和 SignalProducer、 Signal

在RAC3后,冷信号表示为 SignalProducer 类型,热信号表示表示为 Signal 类型。

冷信号 RACSignal 可以通过 toSignalProducer 方法转换为 SignalProducer


extension RACSignal {

func toSignalProducer() -> SignalProducer

}


热的 RACSignal 不能直接转换成 Signal ,因为RACSignal的订阅者可能有副作用。如果要获得Signal,使用 RACSignal.toSignalProducer ,接着调用 SignalProducer.start ,可以显性的发现潜在的副作用。

其他情况下下,用 toRACSignal() 函数。

当用SignalProducer调用时,这些函数会创建一个RACSignal,然后为每个订阅者调用一次start()


func toRACSignal(producer: SignalProducer) -> RACSignal

func toRACSignal(producer: SignalProducer) -> RACSignal


当用Signal调用时,这些函数会创建一个RACSignal,然后只是简单的观察它:

func toRACSignal(signal: Signal) -> RACSignal

func toRACSignal(signal: Signal) -> RACSignal

RACCommand 和 Action

要将RACCommand转换为新的 Action 类型,使用toAction()扩展方法:


extension RACCommand {

func toAction() -> Action

}


使用toRACCommand()函数将Action转换为RACCommand

func toRACCommand(action: Action) -> RACCommand

func toRACCommand(action: Action) -> RACCommand


注意:action和command的 executing 属性不会通过通过桥接API同步。

RACScheduler 和 SchedulerType

每个 RACScheduler 实例都会自动转为 DateSchedulerType SchedulerType 的一种类型),可以在函数方法里自由传递。

有些RAC的 SchedulerType 类型不能转为 RACScheduler 实例,使用 toRACScheduler() 方法:


extension ImmediateScheduler {

func toRACScheduler() -> RACScheduler

}

extension UIScheduler {

func toRACScheduler() -> RACScheduler

}

extension QueueScheduler {

func toRACScheduler() -> RACScheduler

}

RACDisposable 和 Disposable

每个 RACDisposable 实例都会自动转为 Disposable ,可以在要求是 RACDisposable 类型的地方直接使用。

虽然不能自动把Disposable转换为RACDisposable,但是可以手动轻松实现:


let swiftDisposable: Disposable

let objcDisposable = RACDisposable {

swiftDisposable.dispose()

}


欢迎关注我的微博:@没故事的卓同学

你可能感兴趣的:(ReactiveCocoa 4 文档翻译:兼容Objective-C)