时间不是很充足, 先少说点, RAC的好处是响应式编程, 不需要自己去设置代理委托, target, 而是主要以信息流(signal), block为主, 看到这里激动吧, 它可以帮你监听你的事件, 并通过回调(callback)的形式, 实时更新UI。 其实就是把action, 观察者模式(kvo)加上block, 代理等封装起来统一了接口。上面这句话等同于放屁,请别认真,那时候太菜,根本是啥也不懂,这是一种FRP编程范式,准确说也就是通过block(OC),闭包(Swift)实现了一个Maond,再深入也就是统筹学的概念了,原谅我也不是很懂,是一种将数学理论实现在了编程范式中的实际应用,希望有一天我能更加清楚函子(Fountor),单子(Maond)等概念,再写出来给自己分析温习。

  这篇文章就不太针对RAC事件流的初学者了, 希望大家有一些OC的基础, 或者看过OC的应用却苦于找不到Swift宏接口的同学, 我的博客一般都是针对OC转Swift的开发者, 所以这里就简单的写几句先, 以后我再补全加上demo.

  在OC中RAC使用时用的是个宏, 然后骂娘的大家都知道Swift取消了宏, 所以假如你习惯了RAC(Rx完全支持swift), 想要使用的话, 自己新建一个文件, 然后加入如下代码就可以了.

  不过吧Swift其实是不希望我们这么用的,而是如同RxJava,或者是RxJS等生成一个Observe对象来具体操作,不过这里也不再赘述了,OC用习惯了,先这么写,嘿嘿嘿。

public struct RAC  {

var target : NSObject!

var keyPath : String!

var nilValue : AnyObject!

init(_ target: NSObject!, _ keyPath: String, nilValue: AnyObject? = nil) {

self.target = target

self.keyPath = keyPath

self.nilValue = nilValue

}

func assignSignal(signal : RACSignal) {

signal.setKeyPath(self.keyPath, onObject: self.target, nilValue: self.nilValue)

}

}

func RACObserve(target: NSObject!, keyPath: String) -> RACSignal  {

return target.rac_valuesForKeyPath(keyPath, observer: target)

}

infix operator <~ {}

func <~ (rac: RAC, signal: RACSignal){

return rac.assignSignal(signal)

}

  好久没写了,过来更新下,添加了过去OC版本的RACObserve宏的实现函数,又做了一个运算符重载,相信能有效解决OC转Swift同学的疑惑,这里提一两个Swift需要注意的点,RAC同学要注意的。

  1,Swift默认是静态语言,所以对于像过去我们要监听一个对象的特定属性,触发setter等方式都无效,不会生成对应信号,只能手动的KVC,也就是setValue(for:keyPath)函数才可以生成信号,这是极不方便的,所以请看第二条。

  2,苹果允许我们对一个对象特定的属性使用dynamic(动态)关键字进行修饰,这样当对一个值进行setter的时候就可以成功触发,貌似Swift4会为Swift增加动态特性,希望苹果能够更加给力,至少目前而言想要写一些运行时函数还是非常麻烦的,只能桥接OC的runtime模块代码。

  

iOS开发--Swift RAC响应式编程初探的更多相关文章

  1. iOS开发--Swift RAC响应式编程

    时间不是很充足, 先少说点, RAC的好处是响应式编程, 不需要自己去设置代理委托, target, 而是主要以信息流(signal), block为主, 看到这里激动吧, 它可以帮你监听你的事件, ...

  2. [译] Swift 的响应式编程

    原文  https://github.com/bboyfeiyu/iOS-tech-frontier/blob/master/issue-3/Swift的响应式编程.md 原文链接 : Reactiv ...

  3. iOS架构:MVVM设计模式+RAC响应式编程

    https://cloud.tencent.com/developer/article/1117009 一:为什么要用MVVM? 为什么要用MVVM?只是因为它不会让我时常懵逼. 每次做完项目过后,都 ...

  4. MVVM设计模式加RAC响应式编程

    一:为什么要用MVVM? 为什么要用MVVM?只是因为它不会让我时常懵逼. 每次做完项目过后,都会被自己庞大的ViewController代码吓坏,不管是什么网络请求.networking data ...

  5. iOS 开发之使用链式编程思想实现简单的计算器

    链式编程思想是将多个操作(多行代码)通过点号(.)链接在一起成为一句代码,使代码可读性好.例如 a(1).b(2).c(3). 链式编程思想最为关键的是,方法的返回值是block,block必须返回对 ...

  6. Unity基于响应式编程(Reactive programming)入门

    系列目录 [Unity3D基础]让物体动起来①--基于UGUI的鼠标点击移动 [Unity3D基础]让物体动起来②--UGUI鼠标点击逐帧移动 时光煮雨 Unity3D让物体动起来③—UGUI DoT ...

  7. [iOS] 响应式编程开发-ReactiveCocoa(一)

    什么是响应式编程 响应式编程是一种面向数据流和变化传播的编程范式.这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播. 例如,在命令式编程环境中 ...

  8. IOS响应式编程框架ReactiveCocoa(RAC)使用示例

    ReactiveCocoa是响应式编程(FRP)在iOS中的一个实现框架,它的开源地址为:https://github.com/ReactiveCocoa/ReactiveCocoa# :在网上看了几 ...

  9. IOS响应式编程框架ReactiveCocoa(RAC)使用示例-备

    ReactiveCocoa是响应式编程(FRP)在IOS中的一个实现框架,它的开源地址为:https://github.com/ReactiveCocoa/ReactiveCocoa# :在网上看了几 ...

随机推荐

  1. 在 Linux 上使用 Jexus + Mono 建立 Asp.Net 网站.

    godaddy 买了个net空间,一点也不好用. 几个G的数据, 上传数据只有几kb , 想用 ssh 登录上去用 wget 下载,也不行 windows的主机貌似没有 ssh 功能... 后来实在忍 ...

  2. 一不小心写了个WEB服务器

    开场 Web服务器是啥玩意? 是那个托管了我的网站的机器么? No,虽然那个也是服务器,但是我们今天要说的Web服务器主要是指像IIS这样一类的,用于处理request并返回response的工具,没 ...

  3. 一种简单的CQRS架构设计及其实现

    一.为什么要实践领域驱动? 近一年时间我一直在思考一个问题:"如何设计一个松耦合.高伸缩性.易于维护的架构?".之所以有这样的想法是因为我接触的不少项目都是以数据库脚本来实现业务逻 ...

  4. Egret3D 研究报告(一)初试

    了解的朋友应该知道我最近一直都在鼓吹webgl. 今天有一点时间,加了一个Egret3D的群,就开始了这个坑. 耳听为虚,眼见为实.让我们荡起双桨,一起去刷一下egret 打开姿势 至于以什么姿势打开 ...

  5. SQL Server 服务器磁盘测试之SQLIO篇(一)

    数据库调优工作中,有一部分是需要排查IO问题的,例如IO的速度或者RAID级别无法响应高并发下的快速请求.最常见的就是查看磁盘每次读写的响应速度,通过性能计数器Avg.Disk sec/Read(Wr ...

  6. eclipse内下载及配置maven插件(转)

    本文介绍Maven的安装和配置,同样适用于eclipse 1.首先需要安装jdk,eclipse(废话!). 然后到maven官网下载maven,http://maven.apache.org/dow ...

  7. iOS 之消息推送(个推)---个人小结

    前言:自从上个星期开始整这个推送,弄了差不多一个星期,今天终于给整好了,因此现在来记录这段"奇妙"的旅程. 我们公司使用的消息推送是用的第三方--个推,这里不得不说一下,个推的技术 ...

  8. ubuntu 安装Elasticsearch5.0(Debian包)

    通过Debian包安装Elasticsearch Elasticsearch的Debian包可以从downloaded from our website或APT repository 它可以用于在任何 ...

  9. AngularJS之一个元素上绑定多个指令作用域

    前言 众所周知,我们在自定义指令时,会指定它的作用域,即scope设置项(默认值为false). 且,scope设置项,可以有三种值,从而也就代表三种不同的作用域,下面我们再来一起回顾下: 指令之sc ...

  10. SQL实用

    实用的SQL语句   行列互转 create table test(id int,name varchar(20),quarter int,profile int) insert into test  ...