小驢拉磨之—ReactiveCocao(RAC)實戰(一)
使用RAC實現KVO
- 建立Person類,新增兩個屬性name,age;給控制器新增一個UILabel以及一個person屬性
#import <Foundation/Foundation.h>
@interface Person : NSObject
/** 姓名 */
@property (nonatomic, strong) NSString *name;
/** 年齡 */
@property (nonatomic, assign) NSInteger age;
@end
@interface ViewController ()
/** 展示Label */
@property (weak, nonatomic) IBOutlet UILabel *numberLabel;
/** person */
@property (nonatomic, strong) Person *person;
@end
- 建立person物件新增監聽。
- (void)viewDidLoad {
[super viewDidLoad];
//建立person
self.person = [[Person alloc] init];
//新增監聽person的屬性變化
[RACObserve(self.person, name) subscribeNext:^(id _Nullable x) {
//設定label
self.numberLabel.text = x;
}];
}
- 在touchBegan方法中設定person的name屬性
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
//點選螢幕設定numberLabel的text
self.person.name = [NSString stringWithFormat:@"lidong--%d",arc4random_uniform(1000)];
}
輕輕鬆鬆搞定
現在來帶大家看一下RAC這個[RACObserve(self.person, name);巨集內部程式碼
尷尬的我這個不太好看,見天新學的一招交個大家
嗚嗚嗚。。。。使用的beta版一點開Xcode就炸了,這裡先欠大家一張圖大家自己試一下,滾到對應的程式碼處能夠看到巨集裡面的具體程式碼。
使用RAC封裝AFNetworking
- 正常使用
工具類的建立
//建立工具類單例
static NetworkTools *_networkTool;
+ (instancetype)sharedTools {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_networkTool = [[NetworkTools alloc] initWithBaseURL:nil];
_networkTool.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html" ,nil];
});
return _networkTool;
}
/** GET 請求 */
- (void)getReuestWithURL:(NSString *)URLString parameters:(id)parameters {
[self GET:URLString parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"成功——————%@",responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"失敗——————%@",error);
}];
}
工具類的使用
//建立網路請求
[[NetworkTools sharedTools] getReuestWithURL:@"http://www.weather.com.cn/data/sk/101010100.html" parameters:nil];
- RAC版本
get請求建立
/** GET 請求
將GET請求包裝成訊號,我們只需要早外部訂閱就可以了
*/
- (RACSignal *)RACgetReuestWithURL:(NSString *)URLString parameters:(id)parameters {
return [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) {
[self GET:URLString parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"成功——————%@",responseObject);
//傳送訊號
[subscriber sendNext:responseObject];
//確保傳送一次
[subscriber sendCompleted];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"失敗——————%@",error);
//傳送錯誤訊號
[subscriber sendError:error];
}];
return nil;
}];
}
RAC版本的使用
//呼叫RACget請求
[[[NetworkTools sharedTools] RACgetReuestWithURL:@"http://www.weather.com.cn/data/sk/101010100.html" parameters:nil] subscribeNext:^(id _Nullable x) {
//請求成功的呼叫
NSLog(@"RAC___%@",x);
} error:^(NSError * _Nullable error) {
//請求失敗的呼叫
NSLog(@"RAC___%@",error);
}];
- 解釋一下RAC
我們在建立get請求的時候,建立訊號,並且訂閱了訊號的兩種情況一個是正常的訊號,還有一個是發生錯誤的訊號
正常的訊號
//傳送訊號
[subscriber sendNext:responseObject];
錯誤的訊號
//傳送錯誤訊號
[subscriber sendError:error];
在訂閱訊號時使用能夠接受錯誤的方法
- (RACDisposable *)subscribeNext:(void (^)(id x))nextBlock error:(void (^)(NSError *error))errorBlock;
希望看過的朋友有問題給我留言,謝謝~~~
相關文章
- 微信小程式實戰(一)之仿美麗說微信小程式
- 新零售終端突破:小驢生活館打造記實
- kubebuilder實戰之八:知識點小記UI
- 編輯小記之實戰中的MongoDBMongoDB
- React實戰之React+Redux實現一個天氣預報小專案ReactRedux
- 微信小程式入門到實戰(一)微信小程式
- C#黔驢技巧之去重(Distinct)C#
- 實戰:雲開發·實現奶茶店小程式(一)
- DirectShow之介面實戰篇(一) (轉)
- 小程式從入門到實戰系列(一)
- 微信小程式“反編譯”實戰(一):解包微信小程式編譯
- 域滲透之ATT&CK實戰系列——紅隊實戰(一)
- 【小白學PyTorch】8 實戰之MNIST小試牛刀PyTorch
- Oracle 12C RAC DataGuard實戰Oracle
- Spring Cloud Gateway實戰之四:內建predicate小結SpringCloudGateway
- 小程式實戰—答題類小程式
- iOS MVVM+RAC 從框架到實戰iOSMVVM框架
- 實戰11g active data guard on rac
- Flutter實戰之開發問題集(一)Flutter
- 口袋工具之歷史上的今天 - 小程式雲開發實戰
- 微信小程式開發—專案實戰之聊天機器人微信小程式機器人
- 微信小程式支付接入實戰微信小程式
- 專案實戰小問題:
- 爬蟲——三個小實戰爬蟲
- SSM實戰教程(小問題)SSM
- Oracle10g 10.2.0.5 RAC一次恢復ORC、votedisk實戰Oracle
- Storm實戰之WordCountORM
- Storm實戰之TopNORM
- 微信小程式開發—專案實戰之計算器開發微信小程式
- 外掛化之VirtualApk實戰一:專案配置APK
- RAC升級11.2.0.1到11.2.0.4的實戰
- MyBatis初級實戰之五:一對一關聯查詢MyBatis
- 混合開發實戰:App里拉起一個小程式(IOS篇)APPiOS
- 小程式實戰踩坑之B2B商城專案總結
- Taro + 小程式雲開發實戰
- Python實戰小案例,值得收藏!Python
- shiro實戰系列(二)之入門實戰續
- BEM實戰之扒一扒淘票票頁面