在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