时间不是很充足, 先少说点, 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. 如何快速开发SPA应用

    前言 web早已经进入了2.0时代了,如今的网页大有往系统应用级别的方向发展的趋势,再也不是以前的简单展示信息的界面了.如今很多webapp已经做到了原生应用的功能,并且运用自身的优势逐步取代之.HT ...

  2. Lesson 22 A glass envolops

    Text My daughter, Jane, never dreamed of receiving a letter from a girl of her own age in Holland. L ...

  3. JAAS 是个什么梗

    参考资料 该文中的内容来源于 Oracle 的官方文档.Oracle 在 Java 方面的文档是非常完善的.对 Java 8 感兴趣的朋友,可以从这个总入口 Java SE 8 Documentati ...

  4. 前端自学路线之js篇

    上一篇我们讲了前端切图的学习路线,不知大家有没有收获.今天来聊聊前端工程师的核心技能之——JavaScript.js这门语言看似简单,但要做到入门.熟练以至于架构的程度,还是有一段路要走的,今天就来聊 ...

  5. LOCK TABLES和UNLOCK TABLES与Transactions的交互

    LOCK TABLES对事务不安全,并且在试图锁定表之前隐式提交任何活动事务. UNLOCK TABLES只有在LOCK TABLES已经获取到表锁时,会隐式提交任何活动事务.对于下面的一组语句,UN ...

  6. CSS3与页面布局学习总结(三)——BFC、定位、浮动、7种垂直居中方法

    一.BFC与IFC 1.1.BFC与IFC概要 BFC(Block Formatting Context)即“块级格式化上下文”, IFC(Inline Formatting Context)即行内格 ...

  7. Introduction of python

    "Life is short, you need Python!" Python (British pronunciation:/ˈpaɪθən/ American pronunc ...

  8. Grunt学习使用

    原文地址:Grunt学习使用必看 grunt简介神马的不多说,到处一大堆. 我只说说我已经实现了的代码. 按照官方的教程 相信已经配置好了,接下来说 package.json 和 Gruntfile. ...

  9. 由浅入深学习ajax跨域(JSONP)问题

    什么是跨域?说直白点就是获取别人网站上的内容.但这么说貌似又有点混淆,因为通常我们用ajax+php就可以获取别人网站的内容,来看下面这个例子. 来看看跨域的例子,jquery+ajax是不能跨域请求 ...

  10. Docker容器环境下ASP.NET Core Web API应用程序的调试

    本文主要介绍通过Visual Studio 2015 Tools for Docker – Preview插件,在Docker容器环境下,对ASP.NET Core Web API应用程序进行调试.在 ...