//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}
,则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/