在判断软件是否第一次登录时如何让BOOL看上去更有可读性
2015-11-20 00:56
344 查看
今天在为一个app做软件引导页需要判断用户是否进入app时遇到的一些关于BOOL的问题,在这里发表一下我的见解:
在网上查阅了挺多关于iOS如何判断app第一次启动的代码,此处举例一个(作者就不列了):
可以看到,这份代码作者一开始先通过[[NSUserDefaults standardUserDefaults] boolForKey:@”firstStart”](因为并没有进行赋值,所以默认为NO)取反来判断用户第一次启动app,然后在将其设为YES,下次进入的时候就会跑else块的代码了。
相信都看出来了吧,逻辑没错,但是可读性缺并不好。都是这个BOOL的锅,默认为YES不就好了?
于是再想了一下,写了一个即简单又有可读性的code:
这样看上去会让人更加容易理解,虽然不涉及什么算法和优化,但是可读性真的提升了不少(自我安慰)。
看法到这里就讲的差不多了,纯粹分享和记录下来。如果有大牛看到并且有更好的想法跪求快快告知,求知的欲望是强烈的,前路是漫长的,加油!
如何判断app是否第一次登录(大概思路)
判断用户是否第一次登录app,通常的做法是用一个BOOL来记录用户“登录“的这一个行为,所以话在AppDelegate中会设定一个BOOL值(此处叫isFirstLaunch),让isFirstLaunch一开始为YES,当用户进入app并展示完引导页后,isFirstLaunch设置为NO,并把isFirstLaunch存储到UserDefault中。当用户下次进入app时,isFirstLaunch为NO,那么就不会加载引导页。从而通过这个BOOL来判断是否第一次登录。因为这个BOOL,所以问题来了。BOOL那点事
此处先要普及一下,Objective-C的BOOL值默认为NO,这里就有点耐人寻味了,整篇文章其实就是因为这个原因而展开的。在网上查阅了挺多关于iOS如何判断app第一次启动的代码,此处举例一个(作者就不列了):
if(![[NSUserDefaults standardUserDefaults] boolForKey:@"firstStart"]){ [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"firstStart"]; NSLog(@"第一次启动"); }else{ NSLog(@"不是第一次启动"); }
可以看到,这份代码作者一开始先通过[[NSUserDefaults standardUserDefaults] boolForKey:@”firstStart”](因为并没有进行赋值,所以默认为NO)取反来判断用户第一次启动app,然后在将其设为YES,下次进入的时候就会跑else块的代码了。
相信都看出来了吧,逻辑没错,但是可读性缺并不好。都是这个BOOL的锅,默认为YES不就好了?
如何让BOOL更有可读性?
当时涌进脑海的第一个想法是用一个enum来存储两个值 isFirstLaunch,isDefaultLaunch,然后通过枚举转nsnumber来做启动判断,但是后来发现这样会写的很臃肿而且后面要用到这个判断的api调用时也会很麻烦,所以放弃了这个想法(是我想太多)。BOOL的简单有时真的不能被其他东西代替。于是再想了一下,写了一个即简单又有可读性的code:
_isFirstLaunch = ![[NSUserDefaults standardUserDefaults] objectForKey:@"AppIsDefaultLaunch"]; if (_isFirstLaunch) { [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"AppIsDefaultLaunch"]; }else { NSLog(@"default launch"); }
这样看上去会让人更加容易理解,虽然不涉及什么算法和优化,但是可读性真的提升了不少(自我安慰)。
看法到这里就讲的差不多了,纯粹分享和记录下来。如果有大牛看到并且有更好的想法跪求快快告知,求知的欲望是强烈的,前路是漫长的,加油!
相关文章推荐
- bool当成函数参数错误理解
- Android 避免APP启动闪黑屏的解决办法(Theme和Style)
- bool关键字使用不可不看
- C++中BOOL和bool的区别
- delphi编程里bool跟boolean类型的区别
- iOS开发--NSLog 打印bool值
- 【Android基础学IOS开发】BOOL SEL IMP isa
- C++ bool值
- 每天学习一点C++之一
- C++ bool类型
- Objective-C数据类型之id,SEL,BOOL,nil,NULL和NSNull
- Objective-c中的占位符,打印BOOL类型数据
- 如何在swift中自定义基本类型Bool
- c++ - bool类型
- C# - Operator &, | and ^ can also operate bool operands
- ios中BOOL和bool的区别
- bool,int,float,指针变量与零值比较的if语句
- 未定义标识符ULONG_PTR,BOOL等错误解决方法
- NSUserDefaults设置bool值重启后bool只设置丢失问题
- C语言中的布尔型变量