【问题标题】:objC checking empty string, isEqualToString:@"" vs lengthobjC 检查空字符串,isEqualToString:@"" vs 长度
【发布时间】:2012-11-21 20:13:42
【问题描述】:

我有一个字符串

NSString hi;

我不知道什么值会被初始化。可以是 nil,可以是空字符串,可以是任何东西。

使用有什么好处

if (![hi length])

if (![hi isEqualToString:@""])

似乎两种情况都为空字符串、nil 和任何其他类型的字符串返回相同的值。我猜长度更好,因为它更有效。它只是返回一个变量,其中 isEqualToString 必须进行比较。

【问题讨论】:

  • 顺便说一句,你的逻辑是有缺陷的。 ![hi length] 做了类似于[hi isEqualToString:@""] 的事情,而不是 ![hi isEqualToString:@""]
  • 您可能并不打算这样做,但您的陈述恰恰相反。 ![hi length] 当 hi 为 nil 或空时为真,当 hi != "" 时![hi isEqualToString:@""] 为真。否定逻辑通常更令人困惑......
  • @pdriegen 我刚刚告诉过这个。另外,NSString hi; 不会编译。
  • @H2CO3 是的,我发帖后才看到..
  • 谢谢,我没有想通这个问题。 [嗨长度] 是我正在寻找的。​​span>

标签: objective-c syntax compare string


【解决方案1】:

他们不做同样的事情。

[hi length] 对于 nil 或空字符串将返回 0,对于任何其他字符串将返回非零。

[hi isEqualToString:@""] 将在 hi 为空字符串时返回 1,当 hi 为 nil 或任何非空字符串时返回 0。

换句话说,hi 的两行代码给出相同结果的唯一值是nil

您可能想要选项 #1 的行为(将 nil 或空字符串视为“空白”,将任何其他值视为“非空白”),这样就可以使用。

【讨论】:

  • 谢谢,我没有想通这个问题。 [嗨长度] 是我正在寻找的。​​span>
【解决方案2】:

使用if (![hi length])有什么好处

是的。它可以同时检查空字符串是否有nilisEqualToString: 不能这样做,因为如果字符串是 nil,那么发送给它的任何消息都将返回零,因此它看起来不等于空字符串,因此需要再次检查。

顺便说一下,为了清楚起见,您应该考虑使用if (hi.length != 0)

【讨论】:

    【解决方案3】:

    我会做以下事情

    if (hi && ![hi isEqualToString:@""]) {
    
    }
    

    如果hinil,则仅![hi isEqualToString:@""] 就可以让你得到一个真实的结果。

    【讨论】:

    • 我不会这样做。 hi.length != 0 更简洁,建议不要使用它的人是不好的做法。
    • 我不同意。通常,检查对象是否已实际初始化绝对不是坏习惯。也许他稍后将代码更改为![hi isEqualToString:@"some string"],并且 nil 值仍然不是他想要的。但是,是的,在这种情况下,hi.length != 0 就足够了。
    • @userXXX 没有上下文,对此进行辩论是毫无意义的,检查对象是否已初始化并不是一个坏主意,但在我看来,OP 只是在寻找一种检查方法一个零长度的字符串尽可能容易 - 这就是为什么我建议他检查长度。当然,如果将字符串传递给需要非零字符串的方法,情况就不会再出现了,但这次似乎不是这样。
    • 我认为任何一个选项都可以,以后你可以同时回答这两个选项或链接回这里。
    猜你喜欢
    • 2010-09-05
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    • 2011-10-05
    • 2016-02-26
    相关资源
    最近更新 更多