【发布时间】:2014-01-29 00:35:30
【问题描述】:
我编写了一个非常简单的 ReactiveCocoa 测试应用程序来尝试使用 RAC 进行编码(而不是无休止地阅读它)。它在Github,我想回答一些关于它的具体问题。我将链接到代码组件。
首先,简单介绍一下应用程序:它是一个定时器驱动的迭代计数器,可以由用户暂停。 (它的目的是计算已经过去了多少秒,忽略了用户暂停的秒数。)如果用户没有暂停递增行为,则计时器每秒钟递增一个变量。
我担心听到以下三个班级的反馈:
-
MPSTicker (.m),它执行“自初始化以来的累积,除非暂停”,并在信号上提供该结果。它有一个公共的
BOOL属性来控制累积是否正在运行。 -
MPSViewModel (.m),它提供了从
MPSTicker到视图控制器的 ViewModel 包装。它提供只读字符串,显示刻度数并显示操作的文本,如果采取,“暂停”或“恢复”刻度。它还有一个读写BOOL用于暂停/取消暂停滴答声。 -
MPSViewController (.m),它通过将标签绑定到 ViewModel 的刻度字符串、将按钮的文本绑定到“刻度操作”字符串并将按钮的按下映射到 ViewModel 的 paused 属性来使用来自
MPSViewModel的字符串。
我的问题:
- 我不喜欢
BOOLproperty onMPSTicker启用/禁用它的累积,但我不知道如何更被动地做到这一点。 (这也运行到 ViewModel 和 ViewController 的下游:我怎样才能通过所有这三个运行一个字符串来控制代码是否正在运行?) - ViewModel 将
tickString和tickStateString公开为非常传统的属性,但使用这些属性的ViewController 立即将它们映射回text on a label 和button text 和RACObserve。这感觉不对,但我不知道如何从 ViewModel 公开一个信号,以便 ViewController 为这两个属性消费。 - ViewController 在 ViewModel 上翻转
pausedBOOL时会遇到 indignity。我认为这是 #1 的另一个下游效应,“这不应该是BOOL属性”,但我不确定
(注意:我想我在MPSTicker 上避开了paused 的BOOL 的信号,因为我不知道如何在 ViewModel 中使用它来派生两个字符串(一个用于当前刻度计数,一个用于操作文本),以及当用户按下“暂停”或“恢复”按钮时如何推送 UI 驱动的值更改。这是我在问题 1 和 3 中的核心关注点。)
一些屏幕截图可帮助您将这个华丽的设计形象化:
提示:
暂停:
【问题讨论】:
-
对于那些在家里跟随的人,unit test party for this app has begun
标签: ios mvvm reactive-cocoa