Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // NSObject+classSwitch.h
- //
- // Created by Jonathan Annett on 30/10/13.
- // Copyright (c) 2013 Sophtwhere. All rights reserved.
- //
- /*
- example 1: // simple c style switch/case based on instantiated class type.
- switch (testme.classSwitchCode) {
- case isNSString:
- NSLog(@"%@ is a string!",testme);
- break;
- case isNSArray:
- NSLog(@"%@ is an array with %d elements!",testme,[(NSArray*) testme count]);
- break;
- case isNSDictionary:
- NSLog(@"%@ is an dictionary with these keys: %@!",testme,[(NSDictionary*) testme allKeys]);
- break;
- default:
- break;
- }
- example 2: define blocks in a dictionary and dispatch the appropriate one
- NSDictionary *checkerBlocks = @{
- _isUndefinedObject_ : ^{
- NSLog(@"don't know what to do with this");
- },
- // use same handler for NSDictionary and NSMutableDictionary
- _isNSMutableDictionary_ : _isNSDictionary_,
- _isNSDictionary_ :
- ^{
- NSLog(@"this is a block for a dictionary");
- },
- // treat NSURL as undefined.
- _isNSURL_ : _isUndefinedObject_,
- _isNSArray_ :
- ^{
- NSLog(@"this is a block for an array");
- },
- _isNSString_ :
- ^{
- NSLog(@"this is a block for a string - success");
- }
- };
- }];
- [object1 class_specific_block_dispatch_async:dispatch_get_main_queue() blocks:checkerBlocks];
- [object2 class_specific_block_dispatch_async:dispatch_get_main_queue() blocks:checkerBlocks];
- [object3 class_specific_block_dispatch_async:dispatch_get_main_queue() blocks:checkerBlocks];
- */
- #import <Foundation/Foundation.h>
- #import <AVFoundation/AVFoundation.h>
- #import <AssetsLibrary/AssetsLibrary.h>
- #import <MediaPlayer/MediaPlayer.h>
- #define DEFINE_OBECTS()\
- DEF_OBJ_CODE(NSString)\
- DEF_OBJ_CODE(NSArray)\
- DEF_OBJ_CODE(NSMutableArray)\
- DEF_OBJ_CODE(NSDictionary)\
- DEF_OBJ_CODE(NSMutableDictionary)\
- DEF_OBJ_CODE(AVURLAsset)\
- DEF_OBJ_CODE(ALAsset)\
- DEF_OBJ_CODE(NSURL)\
- DEF_OBJ_CODE(UIImage)\
- DEF_OBJ_CODE(MPMediaItem)\
- DEF_OBJ_CODE(NSURLConnection)\
- /////////////////////////////////
- #define DEF_OBJ_CODE(NSObject)\
- extern NSString *_is##NSObject##_;
- DEFINE_OBECTS()
- #undef DEF_OBJ_CODE
- /////////////////////////////////
- extern NSString *_isUndefinedObject_;
- /////////////////////////////////
- #define DEF_OBJ_CODE(NSObject)\
- is##NSObject,
- enum nsObjectSwitchCode {
- isUndefinedObject=0,
- DEFINE_OBECTS()
- };
- #undef DEF_OBJ_CODE
- /////////////////////////////////
- /////////////////////////////////
- #define DEF_OBJ_CODE(NSObject)\
- @interface NSObject (classSwitch)\
- -(enum nsObjectSwitchCode) classSwitchCode;\
- +(enum nsObjectSwitchCode) classSwitchCode;\
- -(NSObject*) as##NSObject;\
- -(BOOL) is##NSObject;\
- @end
- DEFINE_OBECTS()
- #undef DEF_OBJ_CODE
- /////////////////////////////////
- /////////////////////////////////
- #define DEF_OBJ_CODE(NSObject)\
- -(BOOL) is##NSObject;\
- -(NSObject*) as##NSObject;
- @interface NSObject(classSwitchDefaults)
- -(dispatch_block_t) class_specific_block_copy:(NSDictionary*) blocks;
- -(void) class_specific_block_dispatch:(NSDictionary*) blocks;
- -(void) class_specific_block_dispatch_async:(dispatch_queue_t) queue
- blocks:(NSDictionary*) blocks;
- -(enum nsObjectSwitchCode) classSwitchCode ;
- -(BOOL)isUndefinedObject ;
- DEFINE_OBECTS()
- @end
- #undef DEF_OBJ_CODE
- /////////////////////////////////
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement