reactivecocoa的基本使用方法
reactivecocoa是github乙個開源專案,是在ios平台上對frp的實現。frp的核心是訊號,訊號在reactivecocoa(以下簡稱rac)中是通過racsignal來表示的,訊號是資料流,可以被繫結和傳遞。
可以把訊號想象成水龍頭,只不過裡面不是水,而是玻璃球(value),直徑跟水管的內徑一樣,這樣就能保證玻璃球是依次排列,不會出現併排的情況(資料都是線性處理的,不會出現併發情況)。水龍頭的開關預設是關的,除非有了接收方(subscriber),才會開啟。這樣只要有新的玻璃球進來,就會自動傳送給接收方。可以在水龍頭上加乙個過濾嘴(filter),不符合的不讓通過,也可以加乙個改動裝置,把球改變成符合自己的需求(map)。也可以把多個水龍頭合併成乙個新的水龍頭(combinelatest:reduce:),這樣只要其中的乙個水龍頭有玻璃球出來,這個新合併的水龍頭就會得到這個球。
rac統一了對kvo、ui event、network request、async work的處理,因為它們本質上都是值的變化(values over time)。
替代kvo
@property(strong) nsstring *username;[racobserve(self,username) subscribenext:^(nsstring *newname)];
只要username發生變化就列印出來。體現繫結和響應。
[[racobserver(self,username) filter:^(nsstring *newname) ] subscribenext:^(nsstring *newname)
增加乙個過濾器
替代selector
self.button.rac_command = [[raccommand alloc] initwithsignalblock:^(id _) ];
流的實現
rac(self, timelabel.text) = [[[racsignal interval:1 onscheduler:[racscheduler currentscheduler]] startwith:[nsdate date]] map:^id (nsdate *value) ];
組合
rac(self, submitbutton.enabled) = [racsignal combinelatest:@[self.usernamefield.rac_textsignal, self.passwordfield.rac_textsignal] reduce:^id (nsstring *username, nsstring *password) ];
將usernamefield和passwordfield的訊號繫結在一起做reduce處理。返回乙個bool值去跟self.submitbutton.enabled進繫結。
網路請求
self.logincommand = [[raccommand alloc] initwithsignalblock:^(id sender) ];[self.logincommand.executionsignals subscribenext:^(racsignal *loginsignal) ];
}];
函式式程式設計和響應式程式設計
在程式開發中,a b c 賦值之後,b或者c的值變化後,a的值不會跟著變化。響應式程式設計目標就是,如果b或者c的數值發生變化,a的數值會同時發生變化。函式式程式設計是一系列被不公平對待的程式設計思想的保護傘,它的核心思想是,它是一種將程式看成是數學方法的求值 不會改變狀態 不會產生 後面我們馬上會...
ios 函式式程式設計與響應式程式設計
ios函式式程式設計 響應式程式設計概念 如果想再去呼叫別的方法,那麼就需要返回乙個物件 如果想用 去執行,那麼需要返回乙個block 如果想讓返回的block再呼叫物件的方法,那麼這個block就需要返回乙個物件 即返回值為乙個物件的block 在網上流傳乙個非常經典的解釋 響應式程式設計的概念 ...
ios 鏈式程式設計 函式式程式設計以及響應式程式設計
我們如果在完成一件事情的時候,可能會需要有很多步驟,那我們其實就可以把這個步驟看成是乙個乙個的過程,然後再去組合起來,這樣會比較的清晰。就比如說學生要吃飯,讀書,跑步我們如果直接去呼叫方法的話是直接如以下步驟所示去呼叫的,這就是去實現吃飯,學習,跑步。這裡需要注意的是無引數的方法也是可以通過點的形式...