此说明是针对即时通信(例如QQ,微信等)聊天界面中的每条消息传输。
首先,是将ViewController和tableView分开的,tableView写在了一个单独的Cocoa Touch Class中。如图1
图1
然后在NHChatViewController的-(void)viewDidLoad{...}中,如图2
图2
其中,需要解释的有:
1.红线标注的messages其实就是指self.messages,这应该是RACObserve(...)函数的参数写作方式,如果写为self.messages好像是不对的。
2.self.chatView.messagesSignal中的chatView是NHChat.storyboard中针对tableView部分的一个IBOutlet,messagesSignal是NHChatContentView的一个属性。
3.RACObserve(...)返回的是RACSignal,而RACSignal在某种程度上相当与是一个封装了messages的盒子(这个盒子封装的东西的属性取决于messages参数的类型),而这个盒子即是RACSignal型
4.由图2中注释,因为整个plist中的值是不断传输的,所以当messages发生变化时,就将变化后的值传递给NHChatContentView中。
再者,在NHChatContentView:UIView中,而UIView的标配即是-(void)wake等一系列函数,如图3
图3
1.buildTableView是一个自定义函数,旨在构建tableView;
2.@ weakify(self);和@strongify(self)是防止形成引用环;
3.为什么不对self.messagesSignal直接使用subscribeNext解析呢?因为这与程序执行有关,最初得到的值为空,而不能使得消息显示;虽然RACObserve(self, messagesSignal)得到的是封装了两次的NSArray,但是switchToLatest能解决。。。。。
这样做的好处是:在实际消息中,消息的message并不一定来自plist,它也可以来自数据库或者服务器端等,而以Reactive Cocoa这种方式实现,使得我们不用去关心消息的来源。
--20150518学习记录