【问题标题】:How to see if value of variable is Nil如何查看变量的值是否为 Nil
【发布时间】:2014-01-23 05:20:47
【问题描述】:

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

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

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

【问题讨论】:

标签: ios objective-c variables null


【解决方案1】:

将其用作NSString 可能包含空格,我认为这是验证NSString 值的最佳解决方案。

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

【讨论】:

  • Down voter 热烈欢迎您,请提供拒绝投票的原因,以便我们改进它?
  • 看起来好像有人刚进来并把所有答案都标记了一个或什么,尽管大多数答案对我来说都很好......我会投票给你:)
【解决方案2】:

你所拥有的是正确的,但你可能不明白空字符串和 nil 之间的区别。 Nil 表示该字符串尚未初始化,并且不指向任何内存地址。这与指向空字符串 (@"") 的字符串不同。

这是一个小代码 sn-p,您可能会(或可能不会)觉得有用

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

【讨论】:

    【解决方案3】:

    另一种方式:

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

    【讨论】:

      【解决方案4】:

      当您检查 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?

      【讨论】:

        【解决方案5】:

        文本字段和文本视图可以有空格和/或换行,所以你必须修剪它们 .然后你可以检查长度

        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
        }
        

        【讨论】:

          【解决方案6】:

          试试下面的代码:

           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");
          }
          

          如果字符串不包含任何字母(长度 = 0),这并不意味着您的字符串为零。 nil 表示您的字符串未分配到任何内存位置。

          【讨论】:

            【解决方案7】:

            方法很多

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

            【讨论】:

              【解决方案8】:

              最短的方法是:

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

              }

              它允许您一次检查以下情况:

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

              【讨论】:

                【解决方案9】:

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

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

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

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-07-06
                  • 2021-11-16
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2018-11-07
                  相关资源
                  最近更新 更多