1. 程式人生 > >ReactiveCocoa 函式響應式程式設計簡介 鏈式程式設計 函數語言程式設計 響應式程式設計

ReactiveCocoa 函式響應式程式設計簡介 鏈式程式設計 函數語言程式設計 響應式程式設計

最近,RAC的名氣可謂是越來越大,出於對技術的探索心(為了裝逼),最近研究學習了一下RAC,以下是本人在學習中對其的一些粗淺的認識;

首先,什麼是RAC,ReactiveCocoa時Github上的一個Cocoa FRP框架,目的為了接管蘋果的所有事件機制(addTarget,代理,通知,KVO,時鐘,網路處理);從其強大的作用就可以看出,這是一個超重量級大框架,慎用!

RAC運用的是函式響應式程式設計思想,那麼什麼是函式響應式程式設計思想,下面我們就從頭說起:

說到程式設計思想,我們熟悉的就是面向過程程式設計思想和麵向物件程式設計思想,面向過程 即根據問題,一步一實現,極其不利於程式碼的閱讀和維護;面向物件 是對程式碼的抽象處理,即萬物皆物件,由不同的物件,呼叫起自身的方法,實現相應的功能

下面來建立一個dog物件來具體分析下:

dog的.h檔案

#import <Foundation/Foundation.h>

@interface Dog : NSObject

- (void)run;

- (void)eat;

dog的.m檔案

#import "Dog.h"

@implementation Dog

- (void)run {

NSLog(@"%s"__FUNCTION__);

}

- (void)eat {

NSLog(@"%s"__FUNCTION__);

}

以下是在控制器中,建立dog類;

#import 

"ViewController.h"

#import "Dog.h"

@interfaceViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {

    [superviewDidLoad];

    Dog *dog = [Person new];

    [dog run];

    [dog eat];


以上就是面向物件程式設計的呼叫方法,只能單一點用,寫起來比較繁瑣;

接下來介紹鏈式程式設計思想,所謂鏈式程式設計,就是多個方法的呼叫可以像鏈條一樣連線在一起,使程式碼的書寫更簡潔,可讀性更好;

就像這樣:

[[dog run1] eat1];

要想實現方法的這種呼叫方式,可以這樣定義

- (Dog *)run1 {

NSLog(@"%s", __FUNCTION__);

return self;

}

- (Dog *)eat1 {

NSLog(@"%s", __FUNCTION__);

return self;

}

即每個方法都返回呼叫它的物件,以供呼叫後面的方法,這樣,返回的物件就像一個鏈條,連線起了每個方法;

下面說一下函數語言程式設計:

    dog.run2().eat2();

    dog.eat2().run2();

    dog.run2().run2().eat2().run2();

要想實現這種呼叫方式,可以這樣定義方法

//返回一個BlockBlock返回self

- (Dog * (^)())run2 {

    Dog * (^runBlock)() = ^ {

        NSLog(@"run2");

        return self;

    };  

    return runBlock;

}

- (Dog *(^)())eat2 {

    return ^ {

        NSLog(@"");

        return self;

    };

}

通過Block返回的物件,呼叫後面的方法,從而實現了這種呼叫方式;當然如果想有引數,還可以這麼寫

- (Dog *(^)(NSString *))eat3 {

    return ^ (NSString *food) {

        NSLog(@"%@", food);

        return self;

    };

}

- (Dog *(^)(double))run3 {

    return  ^ (double distance) {

        NSLog(@" %f米", distance);

        return self;

    };

}

以上寫法就可以這樣來呼叫

dog.run3(500).eat3(@"骨頭").run3(1000).eat3(@"便便");

寫到這裡相信大家已經發現,masonry框架就是採用這種程式設計思想;

下面再來說說響應式編程思想,響應式程式設計就是一種面向資料流和變化傳播的程式設計正規化。就是說可以在程式語言中很方便地表達靜態或動態的資料流,而相關的計算模型會自動將變化的值通過資料流進行傳播。

說人話就是,你在view中修改資料,model中會跟著變,在model中修改資料,view顯示也跟著變,要實現這種效果,iOS開發中,要想實現這種效果,可以使用KVO,但是!蘋果的KVO會統一呼叫同一個方法,且方法固定不變,當要監聽的物件過多,十分難以管理維護;

說到這裡,答案已經明瞭,RAC之所以叫函式響應式程式設計框架,就是因為她包含了函數語言程式設計思想,和響應式程式設計思想; 好了,時間不早,洗洗睡覺,至於RAC的具體用法和實現,請期待下回分解!