Objective-C中經過下標的方式訪問自定義數據模型中屬性

Objective-C中經過下標的方式訪問自定義數據模型中屬性

      在Objective-C中,能夠經過下標來訪問數組中的元素,若是數組是NSMutableArray類型的可變數組,則還能夠經過下標來對數組中的元素進行賦值操做。例如:數組

    NSMutableArray * array = [[NSMutableArray alloc]init];
    array[0] = @"one";
    NSString * str = array[0];
    NSLog(@"%@",str);

       對於Objective-C中的字典對象,能夠經過鍵值下標的方式來進行訪問,例如:數據結構

    NSMutableDictionary * dic = [[NSMutableDictionary alloc]init];
    dic[@"name"] = @"name";
    NSLog(@"%@",dic[@"name"]);

      對於開發者自定義的的數據結構,通常會採用getter與setter方法來對其屬性進行訪問,雖然官方文檔上沒有說起,實際上,能夠經過實現一些方法,來使自定義的數據模型支持使用下標來進行訪問。測試

      建立一個數據模型類,使其繼承自NSObject,以下:spa

MyModel.h調試

@interface MyModel : NSObject
@end

MyModel.mcode

@implementation MyModel
{
    NSString * _index0;
    NSString * _index1;
    NSString * _value;
}
//經過下標獲取屬性值
-(id) objectAtIndexedSubscript:(NSUInteger)idx {
    return [self valueForKey:[NSString stringWithFormat:@"_index%lu",idx]];
}
//經過下標設置屬性值

- (void)setObject:(id)anObject atIndexedSubscript:(NSUInteger)index{
    [self setValue:anObject forKey:[NSString stringWithFormat:@"_index%lu",index]];
}
//經過鍵值下標獲取屬性
-(id) objectForKeyedSubscript:(id)key {
    return [self valueForKey:key];
}
//經過鍵值下標設置屬性
- (void)setObject:(id)object forKeyedSubscript:(id < NSCopying >)aKey{
    [self setValue:object forKey:aKey];
}
@end

使用以下代碼進行測試:orm

- (void)viewDidLoad {
    [super viewDidLoad];
    id model = [[MyModel alloc]init];
    model[@"_value"] = @"name";
    model[0] = @"one";
    model[1] = @"two";
    NSLog(@"%@,%@,%@",model[0],model[1],model[@"_value"]);
}

這裏有一點須要注意,若使用下標訪問屬性這種方法,必須將model聲明爲id類型,不然會影響編譯。對象

    在打印信息的能夠看到,模型數據的設置和獲取都沒有問題,這種方法能夠徹底解放.h文件,如上所示,咱們在數據模型的.h文件中一行代碼都沒有編寫便可完成與MyModel模型數據的交互。然而其也有很大的弊端,代碼的易調試和可讀性都大大的下降,所以,沒有特殊需求,通常不要使用這種方式來構建模型。繼承

專一技術,熱愛生活,交流技術,也作朋友。ip

——琿少 QQ羣:203317592

相關文章
相關標籤/搜索