[iOS]Block(三) 迭代資料的存取

  • 1347
  • 0
  • iOS
  • 2015-04-03

摘要:[iOS]Block與GCD多執行緒運用(三)

Block也有一個頗為好用的應用推薦,在Collection的擴展應用。在Net的世界中,當使用Collection集合物件來儲存物件,然後使用Foreach的方式可以迭代取出Collection裡面的資料。這樣的功能在iOS世界要如何才能達成?換到iOS的開發中,可以使用block的擴充函數


-(void) enumerateObjectsUsingBlock:(void (^)(id obj, NSUInter idx, BOOL *stop))block

 

註:

在CocoaTouch裏提供了兩個可以迭代取得NSArray與NSDictionary的函數,分別是

enumerateKeysAndObjectsUsingBlock:^(id key,id obj,BOOL *stop) 與

enumerateObjectsUsingBlock: ^(id key,id obj,BOOL *stop)

其中前者是針對NSDictionary來迭代取得值,而後者則是針對NSArray。

 

喔!那實際上到底要怎麼使用?在「Objective-c 對的Json操作(四) 陣列型態的Json資料的操作」文章之中,其實就有用到這樣的功能了。可以參考下面這篇範例:

http://www.dotblogs.com.tw/toysboy21/archive/2015/03/01/150590.aspx

 

在文章中可以看到這個範例使用enumerateKeysAndObjectsUsingBlock函數來取得Json Dictionary的陣列資料,然後再使用enumerateObjectsUsingBlock 以迭代的方式列印出資料。(這邊你可以想像成Forearch)


//迭代的列出所有Json資料中的Key與Value
        [jsonobj enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){
            NSDictionary* array1 = [jsonobj objectAtIndex:idx];
            
            [array1 enumerateKeysAndObjectsUsingBlock:^(id key,id obj,BOOL *stop){
                NSLog(@"key= %@ , Value = %@ ",key,obj);
                        }];
}];

 

 

執行範例時,可以看到資料被撈取出來。這是另一種Block的擴充應用。

 

可以下載範例程式來了解這一個範例:https://github.com/twbenlu/JsonArrayToOC

 

參考文獻:

[.NET]快快樂樂學LINQ系列前哨戰-IEnumerable, IEnumerable<T>與Enumerable

http://www.dotblogs.com.tw/hatelove/archive/2012/05/24/linq-enumerable-extension-method.aspx

[C#] IEnumerable vs IQueryable

http://bob.logdown.com/posts/143161-c-ienumerable