ReactiveCocoa简介翻译

作为一个iOS开发小鱼,一直对RAC的使用垂涎不已,却一直没能深入学习,在项目闲暇的空档自娱自乐做个官方简介的中文翻译(结合google翻译).能力有限,如有谬误,还望指正海涵.以下为正文

ReactiveCocoa

框架代码地址:[https://github.com/ReactiveCocoa/ReactiveCocoa][1]

ReactiveCocoa(RAC)是一个Cocoa框架,灵感来自于响应式编程。它提供了实时地对数据流steams of values变化进行展示和响应的API。

目录:

  1. 介绍

  2. 示例:即时网络搜索

  3. Objective-C和Swift的支持情况

  4. RAC与Rx之间的关系

  5. 使用方法

  6. 操作步骤

如果你已经熟悉了响应式编程或基本了解了ReactiveCocoa,可以去文档文件夹里了解它的运行原理等信息。或者,直接进入我们的文档评论区,了解更多的相关API。

如果您有什么疑问,请先查看该问题在问题讨论区或StackOverflow上是否已经有了相关的讨论.如果没有的话,可随时提交给我们!

兼容性

这份RAC4文档适用于Swift 2.2.x. 关于Swift 1.2的支持请看RAC3.

介绍

ReactiveCocoa的灵感来自于响应式编程.
不同于就地即时地替换和修改可变变量的方案, RAC提供了“事件流”方案, 通过信号Signal和信号产生器的SignalProducer形式来展示和响应实时的数据值values的变化.

"事件流"统一了Cocoa里所有的非即时的事件处理模式,包括了:

  1. 代理方法 Delegate methods

  2. block回调 Callback blocks

  3. 通知模式 NSNotifications

  4. 控制动作和响应链事件 Control actions and responder chain events

  5. 观察者模式 Key-value observing (KVO)

  6. Futures and promises (不了解)

由于所有这些不同的机制可以通过相同的方式展示,容易发现将它们整合链接在一起,可以使代码更精简高效,同时使项目统一性更高.less spaghetti code and state to bridge the gap

更多的有关ReactiveCocoa概念信息,请参见框架概述。

实例:在线搜索,即时响应

比方说,你有一个文本输入框,当用户键入字段,你想即时对其进行搜索查询。

监控文本编辑

第一步是监控文本输入框的字段编辑情况, 专门对UITextField使用RAC扩展以实现这个需求:

let searchStrings = textField.rac_textSignal()    .toSignalProducer()    .map { text in text as! String }

以上代码给我们提供了一个能够发送字符串类型的值的信号产生器. (从Objective-C桥接扩展方法是相当必要的).

建立网络请求

我们需要随着字符串改变而同时执行网络请求. 同时, RAC提供的一个叫做NSURLSession的扩展可以满足这个需求:

let searchResults = searchStrings    .flatMap(.Latest) { (query: String) -> SignalProducer in        let URLRequest = self.searchRequestWithEscapedQuery(query)        return NSURLSession.sharedSession().rac_dataWithRequest(URLRequest)    }    .map { (data, URLResponse) -> String in        let string = String(data: data, encoding: NSUTF8StringEncoding)!        return self.parseJSONResultsFromString(string)    }    .observeOn(UIScheduler())

这个将在主线程上将我们的字符串产生器转换成一个包含搜索结果的数组的产生器.(感谢UIScheduler).

此外,flatMap(.Latest) 确保了只有最后一个搜索操作能被执行.

如果用户在执行网络请求时候输入了其他的字节, 那么该网络请求将在下一个网络请求开始前被取消.

试想如果要自己写, 需要多少代码才能实现这个效果.

接收结果

未完待续

关键字:产品经理

版权声明

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部