您好,登錄后才能下訂單哦!
最近一些新人買了幾本關(guān)于IOS開發(fā)的書,但是關(guān)于KVC的比較少。一些KVC使用的關(guān)注點(diǎn)也讓人云里霧里。蘋果官方文檔也是簡單敘述了使用。但是一些細(xì)節(jié)沒寫清楚。
代碼如下:
建一個(gè)NSObject的類命名A
@interface A : NSObject
{
NSString *_name;
int _count;
NSArray *_arrA;
B *_b;
NSMutableArray *_all;
NSArray *_allA;
}
建個(gè)B類
@interface B : NSObject
{
NSString *_name;
int _count;
NSArray *_arrB;
}
然后在調(diào)用如下:
/*內(nèi)置函數(shù)列表
@avg 返回?cái)?shù)組或者集合中所有元素的平均值
@count 返回組數(shù)或者集合中元素的個(gè)數(shù)
@max 返回組數(shù)或者集合中所有元素的最大值
@min 返回組數(shù)或者集合中所有元素的最小值
@sum 返回組數(shù)或者集合中所有元素的總和
@unoinOfArrays/@distinctUnionOfArrays 給定一系列數(shù)組,返回一個(gè)包含所有數(shù)組的數(shù)組。對于distinct版本,返回?cái)?shù)組中的元素不重復(fù)
@unionOfSets/@distinctUnionOfSets 給定一系列集合,返回一個(gè)包含所有集合的集合。對于distinct版本,返回集合中的元素不重復(fù)。
@unionOfObjects/@distinctUnionOfObjects 給定一系列集合或者數(shù)組,返回一個(gè)包含所有元素的數(shù)組。對于distinct版本,返回?cái)?shù)組中元素不重復(fù)。*/
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。(本人在上面賦值了)
//當(dāng)b不為null就可以進(jìn)行一下路徑使用了
[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"]);//必須數(shù)組
//使用@指令函數(shù) @avg @count @max @min @sum 要保證左邊指令最后一層是數(shù)組
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? 合并數(shù)組
NSLog(@"%@",[@[tt,t] valueForKeyPath:@"@distinctUnionOfArrays._count"]);//對多個(gè)數(shù)組進(jìn)行合并去重
//注意使用的@[tt,t] 對多個(gè)數(shù)組有效 單個(gè)數(shù)組報(bào)錯(cuò) 如下會(huì)報(bào)錯(cuò)
NSArray* pencils = @[@{@"color": @"blue"},
@{@"color": @"red"},
@{@"color": @"blue"},
@{@"color": @"green"}];
//NSLog(@"color:%@",[pencils valueForKeyPath:@"@distinctUnionOfArrays.color"]);//錯(cuò)誤
//單個(gè)數(shù)組錯(cuò)誤
NSLog(@"%@",[a valueForKeyPath:@"_all.@unionOfObjects._count"]);
NSLog(@"%@",[a valueForKeyPath:@"_all.@distinctUnionOfObjects._count"]);
//對單個(gè)數(shù)組去重有效 多個(gè)無效 但不報(bào)錯(cuò) 多個(gè)數(shù)組原來什么樣使用后還是什么樣
具體Demo http://down.51cto.com/data/733639
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。