Ios reactivecococoa发送新值

Ios reactivecococoa发送新值,ios,objective-c,iphone,mvvm,reactive-cocoa,Ios,Objective C,Iphone,Mvvm,Reactive Cocoa,我是个新手,需要帮助。我在找,但我找不出来。假设我有UIPickerView。在该pickerView中有4个选项,每种语言一个选项,例如德语、英语、西班牙语、法语。在选定的语言,我需要发回缩写英语-英语,法语-法语。。。 我使用的是MVVM架构,这是我在ViewController中的方法。在该方法中,我绑定ViewModel和选定的属性 - (void)bindeViewModel { RAC(self, selectedLanguageAbbreviation) = self.lang

我是个新手,需要帮助。我在找,但我找不出来。假设我有UIPickerView。在该pickerView中有4个选项,每种语言一个选项,例如德语、英语、西班牙语、法语。在选定的语言,我需要发回缩写英语-英语,法语-法语。。。 我使用的是MVVM架构,这是我在ViewController中的方法。在该方法中,我绑定ViewModel和选定的属性

- (void)bindeViewModel
{
  RAC(self, selectedLanguageAbbreviation) = self.languageViewModel.observeSelectedLanguage;
}
“observeSelectedLanguage”是我的信号,它的实现是:

-(RACSignal *) observeSelectedLanguage
{
    @weakify(self);
    return [RACObserve(self, selectedLanguage) filter:^BOOL(NSString *value){
    @strongify(self);

    if (value == LocalizedString(myValueString(English)))
    {
        self.selectedLanguageAbbreviation = @"en";
        return self.selectedLanguageAbbreviation;
    }
    else if (value == LocalizedString(myValueString(German)))
    {
        self.selectedLanguageAbbreviation = @"ge";
        return self.selectedLanguageAbbreviation;
    }
    else if (value == LocalizedString(myValueString(French)))
    {
        self.selectedLanguageAbbreviation = @"fr";
        return self.selectedLanguageAbbreviation;

    }
    else if (value == LocalizedString(myValueString(Spanish)))
    {
        self.selectedLanguageAbbreviation = @"sp";
        return self.selectedLanguageAbbreviation;
    }
    else
    {
        self.selectedLanguageAbbreviation = @"en";
        return self.selectedLanguageAbbreviation;
    }
 }];
}

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

您正在查找的是
地图
,而不是
过滤器

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

此外,在信号内部产生副作用(设置
self.selectedlanguage缩写
)不是很好的做法,如果可能,应避免。您可以这样更改逻辑:

selectedLanguage缩写的值显式绑定到
selectedLanguage
(在视图模型的
-init
中):

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


非常好用,谢谢你的额外建议,所以我按照你的描述使用它。谢谢:)你能分享完整的PickerView映射吗?
RAC(self, selectedLanguageAbbreviation) = [RACObserve(self, selectedLanguage) map:^id(NSString* language) {
    // do your mapping here
}];
- (void)bindeViewModel
{
  RAC(self, selectedLanguageAbbreviation) = RACObserve(self.languageViewModel, selectedLanguageAbbreviation);
}