Java null vs Swift nil

3

我来自于Java/Android的背景,我们使用NULL。现在我在做Swift/iOS,对于Swift的nil表示仍然感到困惑。

我能像在Java中使用NULL那样使用它吗?它是否完全相同或其用法存在某些区别?


https://dev59.com/4mAg5IYBdhLWcg3wBXKs#24043722 - vol7ron
可能是 Swift 语言中的 null/nil 的重复问题。 - vol7ron
3个回答

5
您可以将'null'和'nil'视为相同。语言是否包括可选项是一个单独的问题。
Objective-C有'nil',但没有内置的可选项,而Swift有。同样,Java有'null',但没有隐式可选项,而几个JVM语言如Kotlin、Scala和Ceylon在Swift之前就已经有了。 &nbsp 下面是一篇比较Kotlin、Scala和Swift中null、nil和optionals的文章:http://codemonkeyism.com/comparing-optionals-and-null-in-swift-scala-ceylon-and-kotlin/ 顺便说一句,对于Android开发,您可能需要调查Jetbrains提供的Kotlin和相关的Anko库。

1

Swift目前不支持null合并运算符。

Swift中的nil解释

nil表示“没有值”。即使是类,非可选变量也不能被赋值为nil,因此它明确不是null指针,也不类似于它。

我建议您阅读有关Swift中可选项的更多信息。


1
不,实际上它并不等同。一定要阅读可选链接。 - Jack Lawrence
@JackLawrence,它怎么不等同呢?你引起了我的兴趣。我认为唯一的区别在于可以分配给什么,但语义含义相同。如果Java中的所有内容都像原始的obj-c并被视为隐式解包可选项,那么它们将是相同的。 - sylvanaar
我想它只有在与可选项相关时才有意义。我猜这使它足够不同。 - sylvanaar
没错,我给修改后的回答点了个赞。Optional 是一个枚举类型,nil 只是更快捷的打法,表示 Optional.None - Jack Lawrence
2
我认为你们在争论语义。在Java中,null是一种类型,可以转换为任何非基本引用类型;nil也可以转换为任何引用类型,前提是它被声明为可选项。主要区别更多地涉及变量的设置,而不是空值。总的来说,null/nil大致相同(缺少值,不是0),但它们可以分配的规则在Java和Swift之间略有不同。 - vol7ron
显示剩余4条评论

1

声明:我对Java并不是很了解,因此我的回答来自于C++/Objective-C/Swift的角度。

NSHipster的Matt Thompson撰写了一篇非常好的文章,介绍了它与Objective-C和C之间的关系。您可以在这里找到它。

答案基本上归结为:您应该将它视为相同。

  • 0是如何表示原始值的无内容的方式
  • NULL是如何表示C指针的字面上的无内容的方式
  • nil是如何表示Objective-C/Swift对象的字面上的无内容的方式

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接