RACDelegateProxy 与 Common Delegate 实现
RACDelegateProxy vs Common Delegate implementation
我正在研究 ReactiveCocoa(我不擅长 FRP,也不擅长纯函数式编程)并且我看到了 RacDelegateProxy class 可以用 void [=] 抽象委托方法的实现19=] 值。我没有弄清楚的是使用它的好处是什么,当我们与传统实现进行比较时,即实现每个方法并获得调用。那么,使用 RACDelegateProxy 而不是以传统方式实施的主要区别和好处是什么?
代码示例(使用 ReactiveCocoa):
self.deselectDelegate = [[RACDelegateProxy alloc] initWithProtocol:@protocol(UITableViewDelegate)];
[[self.deselectDelegate rac_signalForSelector:@selector(tableView:didDeselectRowAtIndexPath:)]
subscribeNext:^(RACTuple *arguments) {
// code ...
}];
VS(传统实现):
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath {
// code ...
}
您的问题可以概括为“信号相对于回调的优势是什么”。
RAC's github repo 上曾经有一个名为 Escape from Callback Hell 的 link - link 不再有效,但我认为这个标题完美地突出了这一点。
基本上,FRP 的优势之一是将所有异步模式(KVO、委托、通知等)转换为信号,这导致:
简单组合:你试过链接多个网络操作吗?这对标准方法来说是一个很大的拖累。您甚至可能需要在异步链中添加一些数据库操作或位置更新...
提高了可读性并且更容易维护: 相关代码在同一个地方,而不是以回调的形式遍及class。
编辑
找到提到的文章已存档:Escape from Callback Hell
我正在研究 ReactiveCocoa(我不擅长 FRP,也不擅长纯函数式编程)并且我看到了 RacDelegateProxy class 可以用 void [=] 抽象委托方法的实现19=] 值。我没有弄清楚的是使用它的好处是什么,当我们与传统实现进行比较时,即实现每个方法并获得调用。那么,使用 RACDelegateProxy 而不是以传统方式实施的主要区别和好处是什么?
代码示例(使用 ReactiveCocoa):
self.deselectDelegate = [[RACDelegateProxy alloc] initWithProtocol:@protocol(UITableViewDelegate)];
[[self.deselectDelegate rac_signalForSelector:@selector(tableView:didDeselectRowAtIndexPath:)]
subscribeNext:^(RACTuple *arguments) {
// code ...
}];
VS(传统实现):
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath {
// code ...
}
您的问题可以概括为“信号相对于回调的优势是什么”。
RAC's github repo 上曾经有一个名为 Escape from Callback Hell 的 link - link 不再有效,但我认为这个标题完美地突出了这一点。
基本上,FRP 的优势之一是将所有异步模式(KVO、委托、通知等)转换为信号,这导致:
简单组合:你试过链接多个网络操作吗?这对标准方法来说是一个很大的拖累。您甚至可能需要在异步链中添加一些数据库操作或位置更新...
提高了可读性并且更容易维护: 相关代码在同一个地方,而不是以回调的形式遍及class。
编辑
找到提到的文章已存档:Escape from Callback Hell