中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

關于IOS KVC的具體用法,一些蘋果文檔沒寫出來的細節

發布時間:2020-06-09 05:58:23 來源:網絡 閱讀:518 作者:zfajqp 欄目:移動開發

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

浏阳市| 汤原县| 金堂县| 湛江市| 延庆县| 大洼县| 新和县| 潼关县| 依兰县| 雷山县| 大渡口区| 广水市| 阜宁县| 赞皇县| 杂多县| 兴国县| 永宁县| 张家界市| 青田县| 乌兰县| 芒康县| 姜堰市| 江川县| 沙坪坝区| 怀集县| 乌兰县| 天长市| 临汾市| 东乡族自治县| 大悟县| 贵溪市| 苗栗市| 临澧县| 枣强县| 遵义县| 芦溪县| 墨竹工卡县| 合山市| 太仆寺旗| 阳朔县| 湟中县|