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