Reactivecocoa发送新值

时间:2015-05-06 10:42:04

标签: ios objective-c iphone mvvm reactive-cocoa

我是反应堆的新手,我需要帮助。我正在寻找,我无法弄明白。假设我有UIPickerView。在pickerView中有4个选项,每种语言都有一个例如德语,英语,西班牙语,法语。在选定的语言我需要发回缩写english - en,french - fr ... 我使用MVVM架构,这是我的ViewController中的方法。在该方法中,我绑定ViewModel和选定的属性。

$("#detailView").load(returndata.newurl).animate({ height: "" }, 2000);

" observeSelectedLanguage"是我的信号,其实施是:

- (void)bindeViewModel
{
  RAC(self, selectedLanguageAbbreviation) = self.languageViewModel.observeSelectedLanguage;
}

" myValueString"是从枚举返回字符串的宏,所以英语,法语等是枚举的一部分。你能帮我解释一下如何发送所选语言的缩写吗?谢谢

1 个答案:

答案 0 :(得分:2)

您正在寻找map而不是filter

return [RACObserve(self, selectedLanguage) map:^id(NSString *value){
    ...
}];

其他建议

此外,在信号内部产生副作用(设置self.selectedLanguageAbbreviation)不是很好的做法,如果可能应该避免。你可以改变你的逻辑:

selectedLanguageAbbreviation的值明确绑定到selectedLanguage(在视图模型的-init中):

RAC(self, selectedLanguageAbbreviation) = [RACObserve(self, selectedLanguage) map:^id(NSString* language) {
    // do your mapping here
}];

然后您可以删除-observeSelectedLanguage方法并直接绑定视图控制器的selectedLanguageAbbreviation以查看模型的selectedLanguageAbbreviation(如果仍然需要):

- (void)bindeViewModel
{
  RAC(self, selectedLanguageAbbreviation) = RACObserve(self.languageViewModel, selectedLanguageAbbreviation);
}