神奇的RAC巨集

2022-05-16 06:41:27 字數 1145 閱讀 5349

先說說rac中必須要知道的巨集

rac(target, [keypath, [nil_value]]) 

使用:

rac(self.outputlabel, text) = self.inputtextfield.rac_textsignal; 

rac(self.outputlabel, text, @"收到nil時就顯示我") = self.inputtextfield.rac_textsignal;

這個巨集是最常用的,rac()總是出現在等號左邊,等號右邊是乙個racsignal,表示的意義是將乙個物件的乙個屬性和乙個signal繫結,signal每產生乙個value(id型別),都會自動執行:

[target setvalue:value ?: nil_value forkeypath:keypath]; 

數字值會公升級為nsnumber *,當setvalue:forkeypath時會自動降級成基本型別(int, float ,bool等),所以rac繫結乙個基本型別的值是沒有問題的

racobserve(target, keypath) 

作用是觀察target的keypath屬性,相當於kvo,產生乙個racsignal

最常用的使用,和rac巨集繫結屬性:

rac(self.outputlabel, text) = racobserve(self.model, name);

上面的**將label的輸出和model的name屬性繫結,實現聯動,name但凡有變化都會使得label輸出

@weakify(obj); 

@strongify(obj);

這對巨集在 racextscope.h 中定義,racframework好像沒有預設引入,需要單獨import

他們的作用主要是在block內部管理對self的引用:

@weakify(self); // 定義了乙個__weak的self_weak_變數 

[racobserve(self, name) subscribenext:^(nsstring *name) ];

這個巨集為什麼這麼吊,前面加@,其實就是乙個啥都沒幹的@autoreleasepool {}前面的那個@,為了顯眼罷了。

這兩個巨集一定成對出現,先weak再strong

神奇的xx巨集

前段時間研究lcc,看見token.h裡有這樣一些 xx float,1,0,0,0,char,float xx double,2,0,0,0,char,double xx char,3,0,0,0,char,char xx short,4,0,0,0,char,short yy 0,94,7,bx...

ReactiveCocoa之RAC常用巨集(十)

rac有許多強大而方便的巨集。void viewdidload rac巨集 void test kvo racobservel 快速的監聽某個物件的某個屬性改變 返回的是乙個訊號,物件的某個屬性改變的訊號 void test2 void testandtest2 textfield輸入的值賦值給la...

03 RAC之常見的巨集以及其他的用法

作用 給某個物件的某個屬性繫結訊號,一旦訊號產生資料,就會將內容賦值給屬性 應用場景 例如,監聽textfield的值,並把textfield的值賦值給外部某個屬性。呼叫textfield的 方法 void textfielddidendediting uitextfield textfield 監...