枚举类型变量的赋值特性:
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) {
//...
打个断点,可以发现type1
和type2
的值均为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