Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
null,nill是Objective-C中的字符串类型_Objective C_Error Handling_Runtime Error - Fatal编程技术网

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

null,nill是Objective-C中的字符串类型,objective-c,error-handling,runtime-error,Objective C,Error Handling,Runtime Error,在字典中,电子邮件属性值包含空值。我的问题是什么类型的零?->如果比较email==nil | | email==[NSNull null]?您应该检查键@“email”是否包含任何值(如果是字符串) 如果要检查对象是否为零或空,请执行以下操作 NSString *email=dic[@"email"]; if (email) { //do anything with email } 或者,您可以对任何对象调用[Obj iskindof class:[NSNull class]]。这里

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

您应该检查键@“email”是否包含任何值(如果是字符串)

如果要检查对象是否为零或空,请执行以下操作

NSString *email=dic[@"email"];
if (email) {
    //do anything with email
}

或者,您可以对任何对象调用
[Obj iskindof class:[NSNull class]]

这里有几个不同于Objective-C透视图的值:

  • nil
    (在其他语言中也称为
    null
  • [NSNull null]
    (特殊标记值对象)
  • @“
    (空字符串)
  • @“null”
    (只有一个包含4个字符的字符串)
  • 如果您从应用程序中编写
    dataDic
    ,并且您知道应用程序处理得很好,那么您不必检查所有案例。只检查你想要的。例如,如果您的应用程序只将非空字符串写入字典,但有时“电子邮件”不在字典中,则您只需选中
    nil
    ,因为
    objectForKey
    如果值不在字典中,则返回
    nil

    另一方面,如果您从第三方API获得了
    dataDic
    ,例如从JSON解码,那么您应该进行全面检查:

  • 如果JSON最初像
    {“email:null}
  • 如果服务器API发生了变化,您可能会得到NSString以外的其他结构(尽管在这里不太可能)
  • 如果您根本没有键/值,则返回
    nil
  • 您可以通过执行以下操作一次排除所有3项检查:

    if (!email || email == (id)[NSNull null]) {
        //email unavailable
    }
    
    请注意,在指定给UILabel文本之前,您可能不必检查空字符串或nil,因为它们工作正常,只需擦除标签文本:

    NSString *emailStr = nil;
    id emailObj = [dataDic objectForKey:@"email"];
    if ([emailObj isKindOfClass:[NSString class]]) {
        emailStr = emailObj;
    }
    

    您应该使用
    [email isKindOfClass:NSString.class]&&email.length!=0
    instead检查
    email
    是否为字符串,然后再检查其长度。我在问题前面提到过这一点。这只是给他一个方向顺便说一句,威勒克,你是对的。
    NSString *emailStr = nil;
    id emailObj = [dataDic objectForKey:@"email"];
    if ([emailObj isKindOfClass:[NSString class]]) {
        emailStr = emailObj;
    }
    
    self.emailLbl.text = @"";
    self.emailLbl.text = nil; // another way to erase