gpt4 book ai didi

ios - RACDelegateProxy 与 Common Delegate 实现

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:00:05 27 4
gpt4 key购买 nike

我正在研究 ReactiveCocoa(我不擅长 FRP,也不擅长纯函数式编程)并且我看到了 RacDelegateProxy 类,它可以抽象具有 void 返回值的委托(delegate)方法的实现。我没有弄清楚的是使用它的好处是什么,当我们与传统实现进行比较时,即实现每个方法并获得调用。那么,使用 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 - 链接不再有效,但我认为该标题完美地突出了这一点。

基本上,FRP 的优势之一是将所有异步模式(KVO、委托(delegate)、通知...)转换为信号,这导致:

  • 简单组合:您是否尝试过链接多个网络操作?这对标准方法来说是一个很大的拖累。您甚至可能需要将一些数据库操作或位置更新添加到您的异步链中...

  • 提高了可读性并更易于维护:相关代码位于同一个位置,而不是以回调的形式遍布整个类。


编辑

找到提到的文章存档:Escape from Callback Hell

关于ios - RACDelegateProxy 与 Common Delegate 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30193633/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com