加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ios – 对#define和enum的简单代码理解

发布时间:2020-12-14 18:03:17 所属栏目:百科 来源:网络整理
导读:下面的代码是什么意思? #define kSelectedTabDefaultsKey @"Selected Tab" enum { kByName,kBySecretIdentity,}; #define kSelectedTabDefaultsKey @“Selected Tab”是否意味着我们正在定义一个名为“kSelectedTableTabKey”的常量,其值为“SelectedTab”
下面的代码是什么意思?

#define kSelectedTabDefaultsKey @"Selected Tab"

 enum {
    kByName,kBySecretIdentity,};

#define kSelectedTabDefaultsKey @“Selected Tab”是否意味着我们正在定义一个名为“kSelectedTableTabKey”的常量,其值为“SelectedTab”?有点像NSDictionary一个键/值对?

我认为enum只是翻译了kByName值= 0和kBySecretIdentity值= 1.#define kSelectedTabDefaultsKey和enum绑在一起吗?

我不认为我理解正确,因为后面的代码:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

NSInteger selectedTab = [defaults integerForKey:kSelectedTabDefaultsKey];
// How does "selectedTab" get back an integer?  I thought "kSelectedTabDefaultsKey"
// was a  key with a String value of @"Selected Tab ?

UITabBarItem *item = [self.tabBar.items objectAtIndex:selectedTab];

解决方法

#define kSelectedTabDefaultsKey @"Selected Tab"

这只是告诉编译器它看到kSelectedTabDefaultsKey的所有地方,它应该将它扩展为@“Selected Tab”.

所以这:

NSInteger selectedTab = [defaults integerForKey:kSelectedTabDefaultsKey];

变成这样:

NSInteger selectedTab = [defaults integerForKey:@"Selected Tab"];

selectedTab将以integerForKey返回的任何值结束:在默认管理器查找默认数据库中的键@“Selected Tab”之后.据推测,它将是0或1,对应于枚举中的两个值.

枚举与默认密钥无关,但是方便.

enum {
    kByName,};

这告诉编译器在遇到kByName时替换0,而对于kBySecretIdentity则替换为1.不多也不少.

因此,据推测,写入数据库的值将是0或1中的一个.枚举存在使得在代码中,为了清楚起见,您可以说“kByName”而不是0.在您发布的代码中,没有直接提及枚举,因为默认数据库中的值只是传递给选择选项卡.

检查默认数据库的结果是明智的.重新定义枚举:

enum {
    kByName,kByUnusedSentinal
    };

然后:

NSInteger selectedTab = [defaults integerForKey:kSelectedTabDefaultsKey];
if ((selectedTab < 0) || (selectedTab >= kByUnusedSentinal))
    selectedTab = kByName;

这样,如果将bogon写入默认数据库,则您的应用程序将默认为kByName选项卡.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读