Created
October 8, 2012 14:37
-
-
Save yangmeyer/3852865 to your computer and use it in GitHub Desktop.
Drop-in options/defaults support (NSObject category)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Created by YangMeyer on 08.10.12. | |
// Copyright (c) 2012 Yang Meyer. All rights reserved. | |
#import <Foundation/Foundation.h> | |
@interface NSObject (YMOptionsAndDefaults) | |
- (void)ym_registerOptions:(NSDictionary *)options | |
defaults:(NSDictionary *)defaults; | |
- (id)ym_optionOrDefaultForKey:(NSString*)optionKey; | |
@end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Created by YangMeyer on 08.10.12. | |
// Copyright (c) 2012 Yang Meyer. All rights reserved. | |
#import "NSObject+YMOptionsAndDefaults.h" | |
#import <objc/runtime.h> | |
@implementation NSObject (YMOptionsAndDefaults) | |
#define kYMStandardOptionsTableName @"YMStandardOptionsTableName" | |
#define kYMStandardDefaultsTableName @"YMStandardDefaultsTableName" | |
- (void)ym_registerOptions:(NSDictionary *)options | |
defaults:(NSDictionary *)defaults | |
{ | |
objc_setAssociatedObject(self, (__bridge const void *)(kYMStandardOptionsTableName), options, OBJC_ASSOCIATION_RETAIN_NONATOMIC); | |
objc_setAssociatedObject(self, (__bridge const void *)(kYMStandardDefaultsTableName), defaults, OBJC_ASSOCIATION_RETAIN_NONATOMIC); | |
} | |
- (id)ym_optionOrDefaultForKey:(NSString*)optionKey | |
{ | |
NSDictionary *options = objc_getAssociatedObject(self, (__bridge const void *)(kYMStandardOptionsTableName)); | |
NSDictionary *defaults = objc_getAssociatedObject(self, (__bridge const void *)(kYMStandardDefaultsTableName)); | |
NSAssert(defaults, @"Defaults must have been set when accessing options."); | |
return options[optionKey] ?: defaults[optionKey]; | |
} | |
@end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment