您好,登錄后才能下訂單哦!
最近一些新人買了幾本關于IOS開發的書,但是關于KVC的比較少。一些KVC使用的關注點也讓人云里霧里。蘋果官方文檔也是簡單敘述了使用。但是一些細節沒寫清楚。
代碼如下:
建一個NSObject的類命名A
@interface A : NSObject
{
NSString *_name;
int _count;
NSArray *_arrA;
B *_b;
NSMutableArray *_all;
NSArray *_allA;
}
建個B類
@interface B : NSObject
{
NSString *_name;
int _count;
NSArray *_arrB;
}
然后在調用如下:
/*內置函數列表
@avg 返回數組或者集合中所有元素的平均值
@count 返回組數或者集合中元素的個數
@max 返回組數或者集合中所有元素的最大值
@min 返回組數或者集合中所有元素的最小值
@sum 返回組數或者集合中所有元素的總和
@unoinOfArrays/@distinctUnionOfArrays 給定一系列數組,返回一個包含所有數組的數組。對于distinct版本,返回數組中的元素不重復
@unionOfSets/@distinctUnionOfSets 給定一系列集合,返回一個包含所有集合的集合。對于distinct版本,返回集合中的元素不重復。
@unionOfObjects/@distinctUnionOfObjects 給定一系列集合或者數組,返回一個包含所有元素的數組。對于distinct版本,返回數組中元素不重復。*/
A *a=[[A alloc] init];
B *b=[[B alloc] init];
//[b setValue:@"zf" forKeyPath:@"_name"];
[a setValue:b forKey:@"_b"];
[a setValue:@"趙鋒" forKey:@"_name"];
[a setValue:@(12) forKey:@"_count"];
[a setValue:@[@1,@2,@3,@4] forKey:@"_arrA"];
NSLog(@"%@ %@ %@",[a valueForKey:@"_name"],[a valueForKey:@"_count"],[a valueForKey:@"_arrA"]);
[a setValue:@"趙鋒2" forKeyPath:@"_b._name"];//a里面b賦值了要使用路徑 必須保證 a里面的b不為null。(本人在上面賦值了)
//當b不為null就可以進行一下路徑使用了
[a setValue:@(13) forKeyPath:@"_b._count"];
[a setValue:@[@"e",@"f",@"g"] forKeyPath:@"_b._arrB"];
NSLog(@"%@ %@ %@",[a valueForKeyPath:@"_b._name"],[a valueForKeyPath:@"_b._count"],[a valueForKeyPath:@"_b._arrB"]);
NSMutableArray *temp=[[NSMutableArray alloc] init];
for (int i=0; i<5; i++) {
A *a2=[[A alloc] init];
[a2 setValue:@(i+20) forKey:@"_count"];
[temp addObject:a2];
}
for (int i=0; i<5; i++) {
A *a2=[[A alloc] init];
[a2 setValue:@(i+20) forKey:@"_count"];
[temp addObject:a2];
}
[a setValue:temp forKey:@"_all"];
NSMutableArray *t=[a valueForKey:@"_all"];
NSLog(@"%@" ,[t valueForKeyPath:@"@avg._count"]);
NSLog(@"%@" ,[a valueForKeyPath:@"_all.@avg._count"]);//必須數組
//使用@指令函數 @avg @count @max @min @sum 要保證左邊指令最后一層是數組
A *a2=[[A alloc] init];
[a2 setValue:@12 forKey:@"_count"];
A *a3=[[A alloc] init];
[a3 setValue:@13 forKey:@"_count"];
A *a4=[[A alloc] init];
[a4 setValue:@13 forKey:@"_count"];
A *a5=[[A alloc] init];
[a5 setValue:@15 forKey:@"_count"];
NSArray *tt=[[NSArray alloc] initWithObjects:a2,a3,a4,a5,nil];
a._allA=tt;
NSLog(@"%@",[tt valueForKey:@"_count"]);
NSLog(@"%@",[@[tt,t] valueForKeyPath:@"@unionOfArrays._count"]);//NSArray? 合并數組
NSLog(@"%@",[@[tt,t] valueForKeyPath:@"@distinctUnionOfArrays._count"]);//對多個數組進行合并去重
//注意使用的@[tt,t] 對多個數組有效 單個數組報錯 如下會報錯
NSArray* pencils = @[@{@"color": @"blue"},
@{@"color": @"red"},
@{@"color": @"blue"},
@{@"color": @"green"}];
//NSLog(@"color:%@",[pencils valueForKeyPath:@"@distinctUnionOfArrays.color"]);//錯誤
//單個數組錯誤
NSLog(@"%@",[a valueForKeyPath:@"_all.@unionOfObjects._count"]);
NSLog(@"%@",[a valueForKeyPath:@"_all.@distinctUnionOfObjects._count"]);
//對單個數組去重有效 多個無效 但不報錯 多個數組原來什么樣使用后還是什么樣
具體Demo http://down.51cto.com/data/733639
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。