GVUserDefaults
Tired of writing all that code to get and set defaults in NSUserDefaults? Want to have code completion and compiler checks by using properties instead?
是不是已经厌倦了设置NSUserDefaults的值?是不是想直接用属性的方式来获取存储的值?
Create a category on GVUserDefaults
, add some properties in the .h file and make them @dynamic
in the .m file.
创建一个基于GVUserDefaults的category,将属性写在.h文件中,然后在.m文件中写上@dynamic与属性名即可.
// .h
@interface GVUserDefaults (Properties)
@property (nonatomic, weak) NSString *userName;
@property (nonatomic, weak) NSNumber *userId;
@property (nonatomic) NSInteger integerValue;
@property (nonatomic) BOOL boolValue;
@property (nonatomic) float floatValue;
@end
// .m
@implementation GVUserDefaults (Properties)
@dynamic userName;
@dynamic userId;
@dynamic integerValue;
@dynamic boolValue;
@dynamic floatValue;
@end
Now, instead of using [[NSUserDefaults standardUserDefaults] objectForKey:@"userName"]
, you can simply use [GVUserDefaults standardUserDefaults].userName
.
然后呢,你可以不用[[NSUserDefaults standardUserDefaults] objectForKey:@"userName"]这种恶心的方式了,你只需要这么用[GVUserDefaults standardUserDefaults].userName 就行.
You can even save defaults by setting the property:
你甚至可以直接用以下的setter方法来设置值:
[GVUserDefaults standardUserDefaults].userName = @"myusername";
The keys in NSUserDefaults are the same name as your properties. If you'd like to prefix or alter them, add a transformKey:
method to your category. For example, to turn "userName" into "NSUserDefaultUserName":
NSUserDefaults中的键值是与你给的键值一样的,如果你需要加点前缀用以标注,用这个方法transformKey:即可:
- (NSString *)transformKey:(NSString *)key {
key = [key stringByReplacingCharactersInRange:NSMakeRange(0,1) withString:[[key substringToIndex:1] uppercaseString]];
return [NSString stringWithFormat:@"NSUserDefault%@", key];
}
Registering defaults can be done as usual, on NSUserDefaults directly (use the same prefix, if any!).
你可以用以下方式来恢复默认值.
NSDictionary *defaults = @{
@"NSUserDefaultUserName": @"default",
@"NSUserDefaultUserId": @1,
@"NSUserDefaultBoolValue": @YES
};
[[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
However, it's a lot easier to create a setupDefaults method on the category, which takes care of the transformed keys automatically:
当然,你可以用下面更简单的方式来恢复默认值^_^!
- (NSDictionary *)setupDefaults {
return @{
@"userName": @"default",
@"userId": @1,
@"boolValue": @YES
};
}
NSUserDefaults initWithSuitName support
Simply create a methods called suitName
in your category and return the suitName you wish to use:
你只需在你的category中创建一个方法叫suitName,然后根据你的意愿返回你想要的值:
- (NSString *)suitName {
return @"com.example.mySuitName";
}
Performance is nearly identical to using NSUserDefaults directly. We're talking about a difference of 0.05 milliseconds or less.
性能的话完全不用担心,几乎跟NSUserDefaults使用一模一样.
Install via CocoaPods (pod 'GVUserDefaults'
) or drag the code in the GVUserDefaults subfolder to your project.
你可以通过 CocoaPods 来安装,或者是将GVUserDefaults拖到你的项目当中.
Have a bug? Please create an issue on GitHub!
有bug?在GitHub的issue上提出来吧!
GVUserDefaults is an open source project and your contribution is very much appreciated.
GVUserDefaults是一个开源的项目,非常欢迎你给这份源码做贡献.
GVUserDefaults is available under the MIT license. See the LICENSE file for more info.
A huge thank you goes to ADVUserDefaults for its method of creating accessors for primitive types.
首先,非常感谢 ADVUserDefaults ,我从里面获取到了非常多的灵感^_^!