厌倦了在 NSUserDefaults 中编写所有获取和设置默认值的代码?想要通过使用属性来获得代码补全和编译检查吗?
在 GVUserDefaults
上创建一个分类,在一个 .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
现在,您无需使用 [[NSUserDefaults standardUserDefaults] objectForKey:@"userName"]
,而是可以直接使用 [GVUserDefaults standardUserDefaults].userName
您甚至可以通过设置属性来保存默认值
[GVUserDefaults standardUserDefaults].userName = @"myusername";
NSUserDefaults 中的键与您的属性同名。如果您想要给它们添加前缀或更改它们,请在其分类中添加一个 transformKey:
方法。例如,将 "userName" 转换为 "NSUserDefaultUserName"
- (NSString *)transformKey:(NSString *)key {
key = [key stringByReplacingCharactersInRange:NSMakeRange(0,1) withString:[[key substringToIndex:1] uppercaseString]];
return [NSString stringWithFormat:@"NSUserDefault%@", key];
}
注册默认值可以像平常一样完成,直接在 NSUserDefaults 上进行(如果有的话,使用相同的 prefix)!
NSDictionary *defaults = @{
@"NSUserDefaultUserName": @"default",
@"NSUserDefaultUserId": @1,
@"NSUserDefaultBoolValue": @YES
};
[[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
然而,创建一个在分类上的 setupDefaults 方法会更容易,它会自动处理转换后的键
- (NSDictionary *)setupDefaults {
return @{
@"userName": @"default",
@"userId": @1,
@"boolValue": @YES
};
}
只需在你的分类中创建一个名为 suitName
的方法并返回你希望使用的 suitName 即可
- (NSString *)suitName {
return @"com.example.mySuitName";
}
性能几乎与直接使用 NSUserDefaults 相同。我们讨论的是 0.05 毫秒或更小的差异。
通过 CocoaPods(pod 'GVUserDefaults'
)安装,或将 GVUserDefaults 子文件夹中的代码拖动到您的项目中。
有错误吗?请在 GitHub 上创建一个问题!
GVUserDefaults 是一个开源项目,非常欢迎您的贡献。
GVUserDefaults 在 MIT 许可下提供。有关更多信息,请参阅 LICENSE 文件。
感谢 ADVUserDefaults 提供原始类型访问器的实现方法。