摘要:[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