Goo:基于MVVM的IOS实现(下)

Goo是基于MVVM模式进行IOS开发的一个美妙的粘合剂,实现View中元素属性与ViewModel中数据的对接。

转换器

使用场景:比如在APP中,我们在设计消息的时候,用0代表未读,1代表已读,这个时候我们希望UI展示时用图片显示已读和未读的状态,这个在Goo中我们需要借助转换器来实现。

所谓的转换器就是通过一个条件或者一个类型,转换成另外一种结果或者类型,主要实现了IValueConverter接口,下面我们通过一个简单例子来说明。

首先我们来定义一个转换器
@interface TextConverter : NSObject
- (id) convert:(id)valueObject;
@end

#import "TextConverter.h"
@implementation TextConverter
- (id) convert:(id)valueObject{
    NSString *s = (NSString *)valueObject;
    s= [NSString stringWithFormat:@"label:%@",s ];
    return s;
}
使用这个转换器
[self.inputText bindingWithProperty:@"text" withObject:_vm withDataSource:@"text" withBindingMode:TwoWay];
TextConverter *textConvert = [[TextConverter alloc]init];
[self.hineLbl bindingWithProperty:@"text" withObject:_vm withDataSource:@"text" withBindingMode:OneWay withConverter:textConvert];
实现效果

inputText和hineLbl的text属性都绑定到VM的text上,这样通过转换器hineLbl显示内容为:在inputText的输入内容前增加label:

转换器包含Convert和ConvertBack两个函数
  1. Convert函数表示从ViewModel的属性到UI元素属性值的转换。
  2. ConvertBack函数表示从UI元素属性值到ViewModel的属性的值转换。因此,如果绑定模式是一次绑定或单向绑定,只需实现Convert函数;如果绑定模式是双向绑定,需要实现Convert和ConvertBack函数。

具体和控件绑定的方式参见上面的代码

触发器

触发器用于监视ViewModel的某一个属性值或者一组属性值发生变化后,程序要进行相应的逻辑处理。

使用场景

常见的设计用户登录界面时,初期登录按钮不可用。一旦输入用户名和密码后登录按钮变为可用状态等等,类似的场景在具体开发中非常普遍。
在Goo中按照数据驱动的原则,触发器是ViewModel的绑定方法通过Block进行回调。

具体方式参照如下代码
NSMutableArray *conditions = [[NSMutableArray alloc]init];
[conditions addObject:@"text"];
[conditions addObject:@"backgroundColor"];
[_vm bindingTriggerWithCondition:conditions withDoWithBlock:^{
    if([_vm.text isEqualToString:@"456"]&& _vm.backgroundColor ==[UIColor redColor]){
        NSLog(@"sdf");
    }
}];

如果ViewModel的text属性等于“456”,backgroundColor等于红色时即触发去做某种处理。

目前Goo的版本仅仅是对MVVM实现的一个基本尝试,后续会继续维护直到比较成熟后会在Github做第一个版本的发布。

你可能感兴趣的:(Goo:基于MVVM的IOS实现(下))