如何查看变量的值是否为Nil

时间:2014-01-23 05:20:47

标签: ios objective-c variables null

目前我一直试图使用这个if语句:

if (self.foodName.text == nil){
    NSLog(@"No Value")
}

这似乎不起作用。这与return语句有关吗?如果是这样,有人可以解释如何使用return语句或指向正确的方向,这样我就能理解它们,因为我只是Objective-C的新手。

9 个答案:

答案 0 :(得分:1)

使用此选项,NSString可能包含空格,我认为验证NSString值的最佳解决方案。

NSCharacterSet *charSet = [NSCharacterSet whitespaceCharacterSet];
NSString *result = [self.foodName.text stringByTrimmingCharactersInSet:charSet];
if ([result isEqualToString:@""]) {
    NSLog(@"No Value Found");
}

答案 1 :(得分:1)

你所拥有的是正确的,但你可能无法理解空字符串和零之间的差异。 Nil表示字符串尚未初始化,并且未指向任何内存地址。这与指向空字符串(@“”)的字符串不同。

以下是您可能(或可能不会)找到有用的

的小代码段
NSString *aString = nil;
NSLog(@"aString = %@",aString);
if (aString == nil)
{
    NSLog(@"aString is nil");
}

NSString *aSecondString = @"";
NSLog(@"aSecondString equals = %@",aSecondString);
if (aSecondString == nil)
{
    NSLog(@"aString is still nil!");
}
else if ([aSecondString isEqualToString:@""])
{
    NSLog(@"aString is not nil, but is an empty string");
}

输出看起来像这样

2014-01-22 23:29:16.314 TableViewCellWithAutoLayout[94886:a0b] aString = (null)
2014-01-22 23:29:16.315 TableViewCellWithAutoLayout[94886:a0b] aString is nil
2014-01-22 23:29:16.315 TableViewCellWithAutoLayout[94886:a0b] aSecondString equals = 
2014-01-22 23:29:16.315 TableViewCellWithAutoLayout[94886:a0b] aString is not nil, but is an empty string

答案 2 :(得分:0)

另一种方式:

if (self.foodName.text.length == nil)
{
   NSLog(@"No Value")
}

答案 3 :(得分:0)

当您检查nill时,如果对象self.foodName.text指向空的内存空间,那么您的意思是什么。你想要的是:

if ([self.foodName.text isEqualToString:@""]) {
   NSLog(@"No Value")
}

这表明对象self.foodName.text的值是否包含空字符串。

请参阅How do I test if a string is empty in Objective C?

答案 4 :(得分:0)

文本字段和文本视图可以包含空格和/或新行,因此您必须修剪它们 。然后你可以检查长度

NSString *trimmedString = [self.foodName.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

// if self.foodName.text have value @" test \n"
// then trimmedString will have value @"test"

// if self.foodName.text have value @"  \n"
// then trimmedString will have value @""

if (trimmedString.length == 0) {
    // Empty field
}

答案 5 :(得分:0)

请尝试以下代码:

 if (!self.foodName.text){
NSLog(@"Text is nil")
}
else if(self.foodName.text.length == 0){
    NSLog(@"Text is not nil but it does not contain anything");
}

如果string不包含任何字母(lenght = 0),并不意味着你的字符串是nil。 nil表示您的字符串未分配给任何内存位置。

答案 6 :(得分:0)

有很多方法

if([self.foodName.text isEqualToString:@""] || [self.foodName.text isEqual:[NSNull null]]|| self.foodName.text.length == 0)  
{
  //code here
}

答案 7 :(得分:0)

最短的方式是:

if(!self.foodName.text.length){
   NSLog(@"No Value")

}

它允许您一次检查以下案例:

  1. self.foodName.text nil (是的,您可以检查nil对象的属性)
  2. self.foodName.text等于 @“”

答案 8 :(得分:0)

您的代码检查self.foodName.text是否为nil。这意味着没有文本对象。这很可能不是你真正想要检查的。 “无NSString对象”和“根本不包含任何字符的NSString对象”之间存在差异。

如果你想检查文本是否完全没有对象,或者是真实对象但内部没有文本,那么最简单的是self.foodName.text.length == 0.也许你想做一些更复杂的事情,如检查是否没有文本,或只有空格字符,那么上面使用stringByTrimmingCharactersInSet的答案将执行此操作。

这里的简单检查和使用stringByTrimmingCharactersInSet的更复杂的检查使用了一种非常常见的Objective-C技术:如果将方法发送到nil对象,或者尝试访问nil对象的属性,结果为0 /不,无论什么是合适的。因此,如果text == nil,则text.length == 0. stringByTrimmingCharactersInSet返回nil,nil.length再次为0,因此您不必检查这一点。