Я недавно читал ReactiveCocoa v3, и я изо всех сил пытаюсь создать базовые вещи. Я уже прочитал журнал изменений, тесты, несколько вопросов SO и статьи Колина Эберхардта по этому вопросу. Тем не менее, я все еще не вижу примеров базовых привязок.
Скажем, у меня есть приложение, в котором представлено меню дня. Приложение использует 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)
    }
}
ViewModel (MenuViewModel)
Модель просмотра предоставляет различные переменные String, позволяющие диспетчеру просмотра отображать меню. Позвольте просто добавить одно свойство для показа основного курса.
var mainCourse = MutableProperty("")
И добавим привязку для этого свойства:
self.mainCourse <~ Menu.fetchTodaysMenu()
    |> map { menu in
        return menu.mainCourse!
    }
ViewController (MenuViewController)
И последнее, но не менее важное: я хочу представить это основное блюдо в представлении. Я добавлю для этого UILabel.
var headline = UILabel()
И, наконец, я хочу установить свойство text этого UILabel, наблюдая мою модель представления. Что-то вроде:
self.headline.text <~ viewModel.headline.producer
К сожалению, это не работает.
Вопросы
-  Метод fetchTodaysMenu()возвращаетSignalProducer<Menu, NoError>, но что, если я хочу, чтобы этот метод возвращалSignalProducer<Menu, NSError>? Это сделало бы мою привязку в моей модели представления неудачной, поскольку метод теперь может вернуть ошибку. Как я могу справиться с этим?
-  Как уже упоминалось, текущая привязка в моем контроллере просмотра не работает. Я играл с созданием MutableProperty, который представляет свойствоtextдляUILabel, но я так и не понял. Я также считаю, что неудобно или многословно создавать дополнительные переменные для каждого свойства, которое я хочу связать. Это не было необходимо в RAC2. Я намеренно также пытался избежать использованияDynamicProperty, но, может быть, я не должен? Я просто хочу найти правильный способ сделатьRAC(self.headline, text) = RACObserve(self.viewModel, mainCourse);.
Любые другие отзывы/рекомендации о том, как сделать эту базовую установку, высоко оценены.
