前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS·枚举变量在 未赋值/赋值为空 的情况下,默认值为0(即第一个枚举类型)

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

作者头像
陈满iOS
发布2018-09-10 11:26:48
7.6K0
发布2018-09-10 11:26:48
举报
文章被收录于专栏:陈满iOS

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

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

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

代码语言:javascript
复制
typedef NS_ENUM(NSInteger, PopupType) {
    PopupTypeNormal = 0,
    PopupTypeBookInfo = 1
};

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

代码语言:javascript
复制
- (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"的键值对,测试对该字典的判空方法。

  • 测试代码
代码语言:javascript
复制
- (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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.08.23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档