美文网首页
iOS:默认值为YES的NSUserDefaults的封装,无需

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

作者: Eternal_Love | 来源:发表于2018-07-30 17:57 被阅读16次

    使用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
    

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

    相关文章

      网友评论

          本文标题:iOS:默认值为YES的NSUserDefaults的封装,无需

          本文链接:https://www.haomeiwen.com/subject/udpfvftx.html