objective-c - null,nill是Objective-C中的字符串类型

标签 objective-c error-handling runtime-error

//result: ok fine
NSString *email = [dataDic objectForKey:@"email"];
if([email isEqualToString:@"null"])
    email = nil;
if((![email length]) == 0)
    self.emailLbl.text = email;

// result: not fine
NSString *email = [dataDic objectForKey:@"email"];
if((![email length]) == 0 || (email != nil) )
    self.emailLbl.text = email;

在字典中,电子邮件属性值包含空值。我的问题是nil是什么类型? -> if comparison email == nil || email == [NSNull null]

最佳答案

这里有一些与Objective-C观点不同的值:

  • nil(也称为其他语言的null)
  • [NSNull null](特殊标记值对象)
  • @""(空字符串)
  • @"null"(仅包含4个字符的字符串)

  • 如果您从应用程序中编写dataDic,并且知道自己的应用程序处理得当,则不必检查所有情况。仅检查您期望的那些。例如,如果您的应用仅将非空字符串写入字典,但有时“email”不存在,则只需检查nil,因为如果值不在字典内,则objectForKey返回nil

    另一方面,如果您已从第三方API获得dataDic,例如从JSON解码,则应进行完整检查:

    如果JSON最初像null一样是{"email":null} ,则
  • [NSNull null]将放置在字典中
  • 如果服务器API发生了更改,那么您可能会获得NSString以外的其他结构(尽管这里不太可能)。
  • 如果根本没有键/值,则返回
  • nil

  • 您可以通过以下操作一次排除所有3个检查:
    NSString *emailStr = nil;
    id emailObj = [dataDic objectForKey:@"email"];
    if ([emailObj isKindOfClass:[NSString class]]) {
        emailStr = emailObj;
    }
    

    请注意,在分配给UILabel文本之前,您可能不必检查空字符串或nil,因为它们可以正常工作并且只需删除标签文本即可:
    self.emailLbl.text = @"";
    self.emailLbl.text = nil; // another way to erase
    

    关于objective-c - null,nill是Objective-C中的字符串类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50369564/

    相关文章:

    php - PHP类和错误消息传递

    python-3.x - discord.py-需要帮助才能使用cog_command_error

    java - While(matcher.find()) - 错误 - 不起作用

    ios - 如何使用经纬度实现面积计算器

    iphone - 使NSRangeException越界崩溃

    javascript - 如果我在 javascript 中重写 window.onerror 我应该返回 true 还是 false?

    angular - rxjs中多次调用的 Angular 处理错误

    python - pygame中的音乐类型未实现位置

    ios - 来自两个 API 的一个 TableView

    ios - 当我调用 defaultRealm 时应用程序崩溃