iOS开发--Swift RAC响应式编程初探

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

  这篇文章就不太针对RAC事件流的初学者了, 但愿你们有一些OC的基础, 或者看过OC的应用却苦于找不到Swift宏接口的同窗, 个人博客通常都是针对OC转Swift的开发者, 因此这里就简单的写几句先, 之后我再补全加上demo.swift

  在OC中RAC使用时用的是个宏, 而后骂娘的你们都知道Swift取消了宏, 因此假如你习惯了RAC(Rx彻底支持swift), 想要使用的话, 本身新建一个文件, 而后加入以下代码就能够了.闭包

  不过吧Swift实际上是不但愿咱们这么用的,而是如同RxJava,或者是RxJS等生成一个Observe对象来具体操做,不过这里也再也不赘述了,OC用习惯了,先这么写,嘿嘿嘿。函数

public struct RAC  {spa

    var target : NSObject!代理

    var keyPath : String!server

    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模块代码。

  

相关文章
相关标签/搜索