次のような Map クラスがあるとします。
@interface Map : NSObject
@property ( nonatomic, strong ) NSString * name ;
@property ( nonatomic, strong ) NSNumber * latitude ;
@property ( nonatomic, strong ) NSNumber * longitude ;
@end
次のような JSON ファイルがあるとします。
[
{ "name":"Map1"; "latitude":41.881944; "longitude":-87.627778 },
{ "name":"Map2"; "latitude":48.8567; "longitude":2.3508 },
]
次のように 2 つの Map インスタンスを取得できます。
NSArray * CreateMapsWithContentsOfFileAtURL( NSURL * url )
{
NSData * data = [ NSData dataWithContentsOfURL:fileURL ] ;
NSError * error = nil ;
NSArray * array = [ NSJSONSerialization JSONObjectWithData:data options:0 error:&error ] ;
NSArray * maps = [ array collect:^(NSDictionary * dict){
Map * map = [ [ Map alloc ] init ] ;
[ map setValuesForKeysWithDictionary:dict ] ;
return map ;
}] ;
return maps ;
}
-[NSArray collect:]によって提供される場所
@implementation NSArray (Collect)
-(NSArray*)collect:(id (^)(id object))block
{
if ( !block ) { return nil ; }
NSMutableArray * result = [ NSMutableArray array ] ;
for( id object in self )
{
id newObject = block( object ) ;
if ( newObject ) { [ result addObject:newObject ] ; }
}
return result ;
}
@end