在判断软件是否第一次登录时如何让BOOL看上去更有可读性

原创 2015年11月20日 00:56:28

今天在为一个app做软件引导页需要判断用户是否进入app时遇到的一些关于BOOL的问题,在这里发表一下我的见解:

如何判断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");
    }

这样看上去会让人更加容易理解,虽然不涉及什么算法和优化,但是可读性真的提升了不少(自我安慰)。

看法到这里就讲的差不多了,纯粹分享和记录下来。如果有大牛看到并且有更好的想法跪求快快告知,求知的欲望是强烈的,前路是漫长的,加油!

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

iOS: NSUserDefaults 要注意的地方 尤其首次设置默认值的方法

原文地址:http://blog.csdn.net/totogogo/article/details/7473851 NSUserDefaults用于存储一些app setting。当你关闭ap...

【编程之法】如何最快的判断出短字符串b中的所有字符是否都在长字符串a中?编写函数bool StringContain(string&b,string&a)实现此功能。

举例: 如果字符串a是“ABCD”,字符串b是“BAD”,答案是true. 如果字符串a是“ABCD”,字符串b是“BCE”,答案是false. 如果字符串a是“ABCD”,字符串b是“AA”,...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

【编程之法】如何最快的判断出短字符串b中的所有字符是否都在长字符串a中?编写函数bool StringContain(string&b,string&a)实现此功能。

举例: 如果字符串a是“ABCD”,字符串b是“BAD”,答案是true. 如果字符串a是“ABCD”,字符串b是“BCE”,答案是false. 如果字符串a是“ABCD”,字符串b是“AA”,...

华为软件编程规范和范例 2 —— 标识符命名和可读性

3.    标识符命名 3.1    标识符的命名要清晰、明了, 有明确含义, 同时使用完整的单词或大家基本可以理解的缩写, 避免使人  产生误解。 说明: 较短...

软件编写规范(可读性)

//摘抄自华为软件编写规范 1、注意运算符的优先级,并用括号明确表达式的操作顺序,避免使用默认优先级 说明:防止阅读程序时产生误解,防止因默认的优先级与设计思想不符而导致程序出错。 word ...

Android如何判断app是否是每日第一次登录

相信这种需求在如今的app中是非常常见的,每日首次登录会领取一定的积分,为app带来一定的用户粘度。今天来实现以下这个需求。 首先这里先给出一个大致的思路,就是首先我们的保存一个最后退出的时间,然后...

Android如何判断app是否是每日第一次登录

转载同事的内容 原文链接 这里写链接内容首先这里先给出一个大致的思路,就是首先我们的保存一个最后退出的时间,然后每次app进入的时候再拿到我们之前保存退出的时间,和当前的时间进行对比,如果相同则是同...

java采用DateFormat日期格式化方法判断用户今天是否第一次登录(比较简单)

一、描述 1、数据库中有一个date类型的last_login_time字段,即用户每次登录都会更新该字段; 2、在登录时使用jdbcTemplate的queryForObject方法...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)