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

2021-10-06 14:33:20 字數 3161 閱讀 5439

作用:

某個物件某個屬性繫結訊號,一旦訊號產生資料,就會將內容賦值給屬性!

應用場景:

例如,監聽textfield的值,並把textfield的值賦值給外部某個屬性。

呼叫textfield的**方法:

- (void)textfielddidendediting:(uitextfield *)textfield;
監聽文字框的內容,建立信好

[_textfield.rac_textsignal subscribenext:^(nsstring * _nullable x) ];
利用rac這個巨集,給物件的屬性繫結乙個訊號,一旦有訊號產生,就把訊號裡的資料賦值給這個物件的屬性。

rac(_label,text) = _textfield.rac_textsignal;
解讀:就是給_label這個控制項的text屬性,繫結乙個_textfield 文字內容變化的訊號,當_textfield的文字內容變化時,便把文字的內容賦值給_label的text。

作用:

給某個物件新增屬性的監聽,相當於kvo。

使用方法如下:

[racobserve(self.label, text) subscribenext:^(id  _nullable x) ];
解讀如下:

當self.label裡面的內容發生變化時,就會傳送訊號,並監聽到。

應用場景:

當傳送乙個訊號,多處需要訂閱時,如果用signal 直接呼叫subscribenext的方法,那麼訂閱了幾次,訊號就會傳送幾次。

racmulticastconnection這個類可以將多個訊號連線起來訂閱一次。

使用思路:

1.用racsignal建立訊號

2.訊號呼叫publish,將訊號轉成連線類

3.用subscribenext訂閱連線類的訊號

4.用connect將連線類連線起來

**實現如下:

-(void)racmulticastconnectiondemo];

//2.將訊號轉成連線類!!

racmulticastconnection *connection = [signal publish];

//3.訂閱連線類的訊號

[connection.signal subscribenext:^(id _nullable x) ];

[connection.signal subscribenext:^(id _nullable x) ];

//4.連線

[connection connect];

}

**簡單使用如下:

//1.建立訊號

racsubject * subject = [racsubject subject];

//2.繫結訊號

racsignal * bindsignal = [subject bind:^racsignalbindblock _nonnull;

}];//3.訂閱訊號

[bindsignal subscribenext:^(id _nullable x) ];

//4.傳送

[subject sendnext:@"傳送原始的資料"];

//1.建立命令

raccommand * command = [[raccommand alloc]initwithsignalblock:^racsignal * _nonnull(id _nullable input) ];

}];//2.執行命令

racsignal * signal = [command execute:@"輸入的指令!!"];

//3.訂閱訊號!

[signal subscribenext:^(id _nullable x) ];

//建立多個訊號

racsubject * signalofsignal = [racsubject subject];

racsubject * signal1 = [racsubject subject];

racsubject * signal2 = [racsubject subject];

racsubject * signal3 = [racsubject subject];

//訂閱訊號

// [signalofsignal subscribenext:^(id _nullable x) ];

// }];

//switchtolatest :最新的訊號!!

[signalofsignal.switchtolatest subscribenext:^(id _nullable x) ];

//傳送訊號

[signalofsignal sendnext:signal1];

[signalofsignal sendnext:signal2];

[signalofsignal sendnext:signal3];

//傳送資料

[signal3 sendnext:@"3"];

[signal2 sendnext:@"2"];

[signal1 sendnext:@"1"];

因為最後傳送訊號的是,signal3,所以最新的訊號時3。

關於巨集定義,常見巨集及其對應的標頭檔案

1 ifndef和 define組合 一般用於標頭檔案中,防止該標頭檔案被重複引用.其用法一般為 ifndef 標識 define 標識 include or define sth.else endif 標識 在理論上來說可以是自由命名的,但每個標頭檔案的這個 標識 都應該是唯一的。標識的命名規則一...

使用Pandas的迭代以及其他關於效率的一點記錄

1.將series轉成dataframe進行iterrows迭代 初學pandas,開始不知道series可以迭代 計算強度 耗時 464.36 秒 2.使用 series.items 等同itertems 迭代計算 計算強度 耗時 50.41 秒 從這個結果看時間可能是消耗在series轉成dat...

開發 測試與QA的區別以及其他

覺得這個比喻比較新穎,覺得蠻有意思的,故 過來。最近部門中有同事在問這個問題,我想應該還是有滿多人對這三個角色的定位還不是很清楚,因此就這三個角色談談我個人的認識。網路上關於這三種角色的定義已經夠多,在此就不復贅言。我舉個例子。假設產品投放市場的過程等同與學生考試及格的過程,那麼在這個過程中 開發人...