iOS·枚举变量在 未赋值/赋值为空 的情况下,默认值为0(即第一个枚举类型)

枚举类型变量的赋值特性:

  • 一个枚举类型如果没有赋初值,则默认值为0。
  • 一个枚举类型如果赋值为nil,同样值为0。

比如说,有这样一个枚举类型:

typedef NS_ENUM(NSInteger, PopupType) {
    PopupTypeNormal = 0,
    PopupTypeBookInfo = 1
};

在调用的时候,代码欲从VC的字典数组 self.resource 中获取某字典 self.resource[indexPath.row] 并取出 type 的键值对,但实际使用时,该字典并不存在键值对,即 [self.resource[indexPath.row] objectForKey:@"type"] 为空,这时候如果把它传递给枚举类型,所获得到的枚举类型仍为0。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    PopupType type1 = [[self.resource[indexPath.row] objectForKey:@"type"] integerValue];
    PopupType type2 = nil;
    type2;
    if (type1 == PopupTypeNormal) {
          //...

打个断点,可以发现type1type2的值均为PopupTypeNormal,即第一个枚举类型。

拓展:字典键值对判空测试

  • 测试背景

某次调用,字典self.resource[indexPath.row]根本不存在"type"的键值对,测试对该字典的判空方法。

  • 测试代码
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    BOOL flag1 = [[[self.resource[indexPath.row] objectForKey:@"type"] class] isKindOfClass:[NSNull class]];
    BOOL flag2 = [[self.resource[indexPath.row] objectForKey:@"type"] class] == [NSNull class];
    BOOL flag3 = [[self.resource[indexPath.row] objectForKey:@"type"] isEqual:[NSNull null]];
    flag1;
    flag2;
    flag3;
//...
  • 断点结果
  • 结论

可见,某些博客讲的,上述这些对字典的判空方法,是无效的。

我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=2k0gbnmb2pkwk

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小樱的经验随笔

Code forces 719A Vitya in the Countryside

A. Vitya in the Countryside time limit per test:1 second memory limit per test:2...

36960
来自专栏机器学习入门

LWC 59:728. Self Dividing Numbers

LWC 59:728. Self Dividing Numbers 传送门:728. Self Dividing Numbers Problem: A sel...

210100
来自专栏葡萄城控件技术团队

深入浅出OOP(五): C#访问修饰符(Public/Private/Protected/Internal/Sealed/Constants)

访问修饰符(或者叫访问控制符)是面向对象语言的特性之一,用于对类、类成员函数、类成员变量进行访问控制。同时,访问控制符也是语法保留关键字,用于封装组件。 Pub...

35990
来自专栏积累沉淀

Hadoop--HDFS API编程封装

HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件、删除文件、读取文件内容等操作。下面记录一下使用JAVA API对HDFS中...

309100
来自专栏更流畅、简洁的软件开发方式

[自定义服务器控件] 第三步:CheckBoxList。

前面发了文本框和下拉列表框的,这回发一个CheckBoxList。不知道中文名字该叫什么。 CheckBoxList 最郁闷的地方就是:明明可以选择多个选项,但...

23760
来自专栏码匠的流水账

聊聊sentinel的ModifyRulesCommandHandler

本文主要研究一下sentinel的ModifyRulesCommandHandler

13510
来自专栏码匠的流水账

聊聊storm tuple的序列化

storm-2.0.0/storm-client/src/jvm/org/apache/storm/executor/ExecutorTransfer.java

9740
来自专栏LhWorld哥陪你聊算法

Hadoop源码篇--Reduce篇

Reduce文件会从Mapper任务中拉取很多小文件,小文件内部有序,但是整体是没序的,Reduce会合并小文件,然后套个归并算法,变成一个整体有序的文件。

30310
来自专栏HansBug's Lab

1081: [SCOI2005]超级格雷码

1081: [SCOI2005]超级格雷码 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 301  Solv...

26960
来自专栏hbbliyong

jQuery 获取对象 根据属性、内容匹配, 还有表单元素匹配

指定元素中包含 id 属性的, 如: $("span[id]")  代码如下: <span id="span1" name="S1">AAA</span><br...

383130

扫码关注云+社区

领取腾讯云代金券