作用:應用場景:給
某個物件
的某個屬性
繫結訊號,一旦訊號產生資料,就會將內容賦值給屬性
!
例如,監聽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的區別以及其他
覺得這個比喻比較新穎,覺得蠻有意思的,故 過來。最近部門中有同事在問這個問題,我想應該還是有滿多人對這三個角色的定位還不是很清楚,因此就這三個角色談談我個人的認識。網路上關於這三種角色的定義已經夠多,在此就不復贅言。我舉個例子。假設產品投放市場的過程等同與學生考試及格的過程,那麼在這個過程中 開發人...