溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

關(guān)于IOS KVC的具體用法,一些蘋果文檔沒寫出來的細(xì)節(jié)

發(fā)布時(shí)間:2020-06-09 05:58:23 來源:網(wǎng)絡(luò) 閱讀:466 作者:zfajqp 欄目:移動(dòng)開發(fā)

最近一些新人買了幾本關(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

向AI問一下細(xì)節(jié)

免責(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)容。

AI