Tag: Reactive

ReactiveKit的扩展集合

傻瓜发信号 扩展布尔 { func trueSignal(或失败:NSError)-> Signal { 保护自己else {返回Signal.failed(fail)} 返回Signal.just(true) } } 将布尔转换为故障 信号 。 2.可选信号 扩展名可选 { func valueSignal(或失败:NSError)-> Signal { 切换自我{ case .some(let value):返回Signal.just(值) 案例.none:返回Signal.failed(失败) } } 将Optional转换为故障 信号 。 3.尝试/捕获信号 func TrySignal (有趣:@escaping()throws-> T)-> Signal { 返回信号{ 做{ 让res =尝试fun() Observer.completed(with:res) }将let错误捕获为NSError { 观察者失败(错误) } 返回NonDisposable.instance } } 将try / catch转换为信号 4.不 […]

征服ReactiveSwift:基本体(第2部分)

在征服ReactiveSwift系列的第一部分中,我们分析了命令式方法与功能性反应式方法之间的区别。 在本文中,我们将从ReactiveSwift的各种基元(基本构建块)开始,深入研究ReactiveSwift的领域。 ReactiveSwift的作者将其描述如下: ReactiveSwift提供了可组合的,声明性的和灵活的原语,这些原语是围绕随着时间流逝的价值流这一宏伟概念而构建的。 ReactiveSwift带有许多强大的原语,使您能够以功能性的反应方式编写代码。 学习这些原语的最简单方法是根据它们的角色将它们分为不同的类别。 请参考下图。 正如我们在上一篇文章中讨论的那样,在反应式编程中,我们针对随时间的一系列变化而不是针对特定时间点的状态对系统进行建模。 “ 源 ”类别下的原语负责这些更改的生成和传播。 在该类别下,我们有以下基元: Event,Signal,Signal Producer,Action 。 1.活动 事件表示发生了某些事情。 它是流的基本传输单位。 事件有四种类型: 值:具有有效信息的事件 失败:表示错误的事件 已完成:表示流结束的事件。 此事件后将不再发出其他事件。 中断:表示事件产生被中断。 2.信号 信号是事件的单向流。 可以通过观察员订阅来访问信号的每个事件。 观察信号不会给信号带来任何副作用。 所有事件立即发送给给定信号的所有观察者。 3.信号产生器 顾名思义, SignalProducer是产生信号的东西。 它封装了可以在以后开始的工作(也可以重复)。 换句话说, SignalProducer生产者封装了延迟且可重复的工作。 启动它时,将创建一个新信号,该信号将发出信号,作为调用封装工作的结果。 因此,由于需要启动SignalProducer ,因此据说它很冷,而Signal是温暖的。 4.行动 在延迟和可重复的工作中也使用了动作 。 它封装了SignalProducer的工作。 我们要更好地控制动作而不是信号产生器 。 例如,我们可以通过发送不同的输入值来控制输出。 可以启用或禁用它。 可以通过属性 (如下所述)来被动地控制其状态。 当用输入调用时, 动作将输入和最新状态应用于预定义的工作,并将输出推送给观察者。 5.财产 属性是一个可观察的框,它存储一个值并通知观察者该值的将来更改。 它具有用于生产者和信号的吸气剂,可发出可以观察到的值。 可以使用初始值和Signal , […]

缩小ViewController的方法:适配器,数据源,观察者…(iOS)

你好! 我敢肯定,你们大多数人都遇到了至少一个如此巨大的视图控制器,以至于您甚至都无法搜索到想要的东西。 或更糟糕的是,您可能会发现大多数具有tableView(或集合,具有数据源的任何东西)的控制器都执行相同的操作……获取数据,修改数据,更新视图,重复…… 我们一直在这样做, 如果您在每个视图控制器中执行所有操作,则它们可能是0%可重用的 。 图表 这是普通表格视图控制器的示意图: TableViewController向dataSource询问数据。 dataSource有一个适配器 , 将我们的tableView 绑定到我们的数据。 适配器具有一个可观察的元素数组,因此在更新时,适配器会收到通知,并且tableView更新。 注意:我没有为此使用任何外部库。 可观察的 首先,我们的可观察集合将基本上遵循以下协议: ObservableCollection协议 从这里,您可以猜测会有一个动作( ObserverAction )用于我们对集合所做的“所有”操作(追加,删除等),因此,观察者将在那里绑定动作。 我为数组创建了一个简单的observableArray ObservableArray ,这是我们将在本示例中使用的数组(类和整个项目都在最后链接)。 为什么可观察? 看看为我们所做的一切添加一些观察者是多么容易: 适配器-将视图绑定到我们的数据 接下来是创建我们的适配器,它可以符合: 公共协议ComponentAdapter { relatedtype组件:UIView relatedtype元素:集合 } 我们可以创建一个符合此协议的TableViewAdapter 。 在这种情况下,该组件将是UITableView 。 基本上,我们拥有我们的视图以及要将其绑定到的数据。 使用我们的可观察数组,绑定过程非常容易。 在适配器的init方法中,您可以执行以下操作: 如何使用Adapter类中的ObservableArray将数据绑定到组件 数据源 表格视图控制器将绑定到一个数据源 ,这是一个符合UITableViewDataSource的自定义数据源 ,它具有一个适配器 ,用于在源和UI级别管理数据中的更新 。 在自定义数据源中,我们使用tableViewAdapter 在内部,我们实现了典型的方法: numberOfRowsInSection , cellForRowAt indexPath以及其他一些方法,可通过滑动单元格或仅将行移动到其他位置来删除它。 例如,这是移动一行的全部代码 : […]