【问题标题】:ObjC if (nil == s){} [duplicate]ObjC if (nil == s){} [重复]
【发布时间】:2013-07-28 20:50:28
【问题描述】:

我曾经看到过类似的情况 if (something == 0){do it},但是 现在我在 iOS_Book 中遇到了这句话

if (nil == s)

这和if (s == nil)一样吗?如果不一样,有什么区别?

【问题讨论】:

  • 是的,它们是一样的
  • 不,我所链接的问题不仅仅是关于NULL、@PhilipKendall,而且所涉及的具体常量无论如何与答案无关。 “为什么是if( 3 == x )?”有相同的答案。
  • 我建议测试虚假值,例如:if(!s) 或 if(!something)

标签: objective-c


【解决方案1】:

它们在测试时是相同的,但是如果您无意中使用了= 而不是==,则将 nil 放在左侧可以避免意外分配错误。

【讨论】:

  • 是的,我已经读过了……
  • 不过,这是一个标准的 llvm 编译器警告,所以 Objective C 并没有真正的优势。我们在测试之前修复了所有的警告,对吧? :)
【解决方案2】:

尽管nil == s 有一个非常好的优点,这两种形式的作用完全相同:如果你打错字并写= 而不是==,你会得到一个编译错误,你可以' t 分配给一个常数。这通常被称为“尤达符号”。

【讨论】:

  • 这个名字来源于这个符号降低了可读性的事实。使用现代编译器,无论如何你都会收到警告
  • @Sulthan 我同意 Objective-C 中的价值非常低(感谢 Clang)。但是,它在 JavaScript 等高级语言中的使用要好得多,在这种语言中,作为正常“构建”过程的一部分,您不会得到任何类型的健全性检查,而不得不依赖外部验证器(这些验证器很少集成到开发中)默认情况下,至少是 IME)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-27
  • 2014-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多