iOS:默认值为YES的NSUserDefaults的封装,无需

2018-07-30  本文已影响16人  Eternal_Love

使用NSUserDefaults保存BOOL值时,有时候会用到默认值为YES的情况。常见的做法是在程序启动完成时,使用registerDefaults来把一个设置好默认值的字典传进去。

有些场景下,希望不调用registerDefaults方法就可以将默认值设置为YES,这时可以用setObject:forKey:方法和objectForKey:来实现,通过读取出来的相应的object是否为nil来判断是否是第一次读取该值。

代码如下:

#import <Foundation/Foundation.h>


/**
 基于NSUserDefaults,默认值为YES,不需要registerDefaults。读和写都必须要用该类提供的接口。
 */
@interface LHWDefaultYESUserDefaults : NSObject

+ (BOOL)boolForKey:(NSString *)key;
+ (void)setBool:(BOOL)boolValue forKey:(NSString *)key;

@end

@implementation LHWDefaultYESUserDefaults

+ (BOOL)boolForKey:(NSString *)key {
    BOOL result;
    NSNumber *boolNumber = [[NSUserDefaults standardUserDefaults] objectForKey:key];
    if (boolNumber) {
        result = boolNumber.boolValue;
    } else {
        result = YES;
    }
    return result;
}

+ (void)setBool:(BOOL)boolValue forKey:(NSString *)key {
    [[NSUserDefaults standardUserDefaults] setObject:@(boolValue) forKey:key];
}

@end

需要注意的是,读与写一定都要用该类提供的方法,不然会导致取出或设置的类型不一致,后果很严重。

上一篇下一篇

猜你喜欢

热点阅读