【发布时间】:2015-07-26 05:47:42
【问题描述】:
我最近一直在阅读 ReactiveCocoa v3,但我只是在设置基本的东西。我已经阅读了变更日志、测试、几个 SO 问题以及 Colin Eberhardt 关于该主题的文章。但是,我仍然缺少有关基本绑定的示例。
假设我有一个显示当天菜单的应用。该应用使用 RAC3 和 MVVM 模式。
模型(菜单)
该模型有一种简单的方法来获取今天的菜单。至于现在,这不做任何网络请求,它基本上只是创建一个模型对象。 mainCourse 属性是 String。
class func fetchTodaysMenu() -> SignalProducer<Menu, NoError> {
return SignalProducer {
sink, dispoable in
let newMenu = Menu()
newMenu.mainCourse = "Some meat"
sendNext(sink, newMenu)
sendCompleted(sink)
}
}
视图模型(MenuViewModel)
视图模型公开了不同的String 变量,让视图控制器显示菜单。让我们添加一个属性来显示主菜。
var mainCourse = MutableProperty("")
我们为这个属性添加一个绑定:
self.mainCourse <~ Menu.fetchTodaysMenu()
|> map { menu in
return menu.mainCourse!
}
视图控制器(MenuViewController)
最后但并非最不重要的一点是,我想在一个视图中展示这门主菜。我会为此添加一个UILabel。
var headline = UILabel()
最后我想通过观察我的视图模型来设置那个 UILabel 的text 属性。 喜欢的东西:
self.headline.text <~ viewModel.headline.producer
不幸的是,这不起作用。
问题
-
fetchTodaysMenu()方法返回一个SignalProducer<Menu, NoError>,但是如果我希望这个方法返回一个SignalProducer<Menu, NSError>而不是呢?这将使我在视图模型中的绑定失败,因为该方法现在可能会返回错误。我该如何处理? - 如前所述,我的视图控制器中的当前绑定不起作用。我一直在尝试创建一个代表
UILabel的text属性的MutableProperty,但我从来没有做对。我还认为必须为我要绑定的每个属性创建额外的变量感觉很笨拙或冗长。这在 RAC2 中是不需要的。我也有意避免使用DynamicProperty,但也许我不应该?我基本上只是想找到正确的做法RAC(self.headline, text) = RACObserve(self.viewModel, mainCourse);。
非常感谢有关如何进行此基本设置的任何其他反馈/指导。
【问题讨论】:
-
我确实是。谢谢@mustafa!
标签: swift reactive-cocoa reactive-cocoa-3