问题标签 [reactive-cocoa]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
6007 浏览

reactive-cocoa - 带有 NSMutableArray 推送/弹出的 ReactiveCocoa 示例?

有人可以提供一个使用 ReactiveCocoa 抽象来实现这样的事情的单行示例:

我看到 NSArray 的一些扩展被删除以支持 Mantle https://github.com/ReactiveCocoa/ReactiveCocoa/pull/130但仍然找不到 NSArray 操作的简单示例。

0 投票
1 回答
3040 浏览

objective-c - Reactive Cocoa - 将某些信号值转换为错误或完成

也许我仍然在反应式学习曲线上苦苦挣扎,但我很难弄清楚如何将非反应式类与我的反应式代码的其余部分联系起来。我正在使用一个类别来扩展非反应性类。

该属性只是一个 Enum,表示网络操作的当前状态,例如 New、Submitted、Processing 和 Completed。现在我已经在我的类别中编写了以下方法:

但是,当状态从 Processing -> Completed 或从任何状态转换为 Errored 时,我希望此信号发送 Completed 或 Error 而不是 Next Value。我怎样才能在一个类别中做到这一点?我想做类似的事情:

编辑:我查看了 GHAPIDemo 并提出了以下内容:

我不是 100% 确定这是正确的方法,但它似乎正在工作。

0 投票
1 回答
329 浏览

objective-c - 在 ReactiveCocoa 中编写 Haskell 的中断

我需要有一个类似于 Haskell 的 ReactiveCocoa 函数break

基本上返回一个元组,其第一个组件是所有匹配且在第一个匹配之前出现的项目。第二个组件是匹配的项目和列表的尾部(无论它们是否匹配)。

ReactiveCocoa 的直接翻译是

显然它可以工作,但由于breakSequence:seq withBlock:.

在 ReactiveCocoa 中实现此功能的最佳方法是什么?

谢谢 :-)

0 投票
2 回答
2362 浏览

cocoa-touch - 如何使用 ReactiveCocoa 实现承诺模式?

我是来自 EmberJS 的 JS 背景的 iOS 开发新手。我想将我的 EmberJS 应用程序移植到 iOS 应用程序。因此,我想在我的 iOS 应用程序中使用类似的结构。由于 EmberJS 大量使用了 Promise,我在 iOS 上搜索了类似的东西并偶然发现了 ReactiveCocoa。在 ReactiveCocoa 的介绍中说,这个框架可以用来实现 Promises。我试过了,但它不能正常工作。我想从一个非常简单的例子开始:

  • 发出异步网络请求(填充 UITableViewController)。从此方法返回一个承诺。
  • 订阅此承诺并在完成后重新加载 TableView。

我想这样做,因为在成功加载数据后我将不得不执行几件事。我的方法基本上有效,但我遇到了以下问题:

  • 请求完成后,我的 TableView 不会立即重新加载。
  • subscribeCompleted请求完成后,我立即在我的日志中看到了日志语句。但是 TableView 保持空白。
  • TableView 在等待几秒钟后加载数据。
  • 如果我在看到 Log 输出后开始滚动 TableView,则 TableView 会突然加载。

我怀疑这可能会发生,因为我正在后台线程中获取数据。我认为 promise ( subscribeCompleted) 的解析也可能发生在后台线程中,而 Cocoa Touch 可能不喜欢这样。我对吗?但如果是这种情况,我应该如何实现承诺?

我希望你能帮助我开始使用 ReactiveCocoa。谢谢!:-)

更新: 我设法通过将 to 包装reloadData在 a 中来修复它,dispatch_async(dispatch_get_main_queue(), ^{...但我仍然不确定这是最好的方法还是 ReactiveCocoa 推荐的方法。所以我仍然渴望听到一些答案:-)

0 投票
1 回答
3414 浏览

objective-c - 拆分 RACSignal 以消除状态

我正在使用 ReactiveCocoa 来更新UILabel倒计时UIProgressView

这工作得很好,但是,我对count变量或读取值self.progressView.progress以减少它并不特别满意。

我觉得我应该能够吐出信号并直接使用RAC宏绑定属性。就像是:

...s 揭示了我被困在哪里。我无法完全理解如何编写RACSignal不需要依赖状态变量的内容。

此外,当流完成时,我不确定在哪里/如何注入// Move along...我需要的副作用。

我敢肯定,一旦您以正确的方式思考,两者都足够简单,但是,我们将不胜感激。

0 投票
1 回答
2869 浏览

objective-c - 合并两个 RACSignals,在第一次完成时完成

我有两个RACSignal,其中一个是计时器,另一个表示有工作要做。由于工作指示有时不可靠,因此有计时器,它负责在精确通知不起作用时定期完成工作。

一般设置是:

现在我想signal一完成就incomingWorkSubject完成。所以,一般来说:只要它的任何输入信号完成,就完成合并的信号。不幸的是,[RACSignal merge:...]没有做我想做的事,显然是在等待所有传入的信号完成。

实现这一目标的 ReactiveCocoa 方式是什么?

0 投票
1 回答
1529 浏览

objective-c - 如何绑定两个 RACChannelTerminal?

我有两个要同步的 NSTextView。我正在使用ReactiveCocoa从它们的可可绑定中生成 RACChannelTerminals。

所以我很自然地认为下一步就是制作一个RACChannel,然后将两个终端都插入它。

但随后编译器说不:Assignment to read only property. 看起来这应该是直截了当的,所以我在这里做错了什么?如何使用自己的终端创建类似 RACChannel 的绑定?

0 投票
1 回答
4916 浏览

ios - 使用 ReactiveCocoa 从对象数组链接异步操作

我有一组实体,我想对实体执行异步操作。这些操作应该与数组中的实体链接并以相同的顺序运行。我是 RAC 的新手。如何在 RAC 中做到这一点?

0 投票
1 回答
280 浏览

objective-c - 密码锁逻辑 - 反应可可

我对 Reactive Cocoa 完全陌生。在花了一些时间阅读文档和一些教程之后,我想我在尝试做一些相对简单的事情时一定错过了一个技巧(我希望!)。

我正在尝试编写 4 位密码锁的逻辑作为练习。

用户使用滚轮输入,当数字 1 正确时只能输入数字 2,选择数字 2 时只能输入数字 3 等等。基本上,我需要观看输入的数字流,检查“正确”数字,并且,当它们相等时,推进系统检查通行证组合的第二个数字。

我可以看到如何从用户输入中生成 RACSignal,但我不确定使用什么模式来检查“正确”数字以便使用...filter:?...combineLatest 推进序列 RACSequence: ?

我只是想弄清楚这一点,所以代码示例很受赞赏,但是正确方向的一般概念指针会很棒。

0 投票
1 回答
2854 浏览

objective-c - 在有限数量的线程上并行订阅 ReactiveCocoa 信号

我订阅了这样创建的信号:

我想并行-flatten:订阅n信号。我尝试-startLazilyWithScheduler:block:使用[RACScheduler scheduler]“内部信号”,但这会使我的计算机停止运行。在 Instruments 中,看起来它正在为每个信号创建一个新线程。

此代码的先前版本作为 NSOperations 添加到 NSOperationQueue 中,该队列设置为n并行运行操作。它可以工作,但我可以使用 RAC 使其更容易理解。

如何-flatten: n从我的信号信号中一次发出信号,以便内部信号每个都在相同的n线程上运行?

======================================

更新:我叫错了树;我的性能问题是由于物理内存不足。我猜有些对象的寿命太长了,导致我的记忆问题。我偶然在某个时候解决了我的内存使用问题,同时进行了重构以更频繁地使用 RAC。我不知道人们是否会从我的代码中受益,但这里是:

我使用以下代码从使用外部信号开始:

要改为使用更多 RAC 操作(也替换同一类中的其他命令式代码):

现在,如果我更新我的工作方法以在后台调度程序上返回冷信号,flatten:则会导致多个信号同时运行,而不会出现问题: