【问题标题】:Java null vs Swift nilJava null vs Swift nil
【发布时间】:2015-12-05 00:03:16
【问题描述】:

我来自 Java/Android 背景,我们使用 NULL。现在我正在做 Swift/iOS,我对 Swift 的 nil 的含义感到困惑。

我可以在 Java 中像 NULL 一样使用它吗?它的行为方式是否完全相同,或者它的用法有什么不同?

【问题讨论】:

标签: ios swift null


【解决方案1】:

你可以认为'null'和'nil'是一样的。语言是否包含可选项是一个单独的问题。

Objective-C,有 'nil',但没有内置的可选项,而 Swift 有。类似地,Java 有“null”,但没有隐式可选项,而 Kotlin、Scala 和 Ceylon 等几种 JVM 语言有,而且在 Swift 之前就有。 &nbsp

这里有一篇文章比较了 Kotlin、Scala 和 Swift 中的 null、nil 和可选项:http://codemonkeyism.com/comparing-optionals-and-null-in-swift-scala-ceylon-and-kotlin/

顺便说一下,对于 Android 开发,您可能需要研究 Jetbrains 的 Kotlin 和相关的 Anko 库。

【讨论】:

    【解决方案2】:

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

    Swift nil 解释

    nil 表示“没有价值”。非可选变量不能分配nil,即使它们是类,所以它明确不是null 指针,也不类似于指针。

    我可以推荐你阅读更多关于 Swift 中的optionals

    【讨论】:

    • 不,实际上,它不等价。一定要阅读可选链接。
    • @JackLawrence 怎么不等价。你已经达到了我的兴趣。我认为唯一的区别在于它可以分配给什么,但它具有相同的语义。如果 Java 中的所有内容都像原始的 obj-c 并被视为隐式展开的可选项,那么它们将是相同的。
    • 你是对的,阅读了更多关于它的信息,现在就学会了。 @sylvanaar 检查更新的答案。
    • 我想它只对选项有意义。我想这让它变得足够不同了。
    • 我认为你在争论语义。 Java中的null是一种类型,可以强制转换为任何非原始引用类型; nil 也可以转换为任何引用类型,只要它被声明为可选的。主要区别更多的是关于变量的设置,而不是 null/nil 值。总的来说,null/nil 基本相同(缺少值,不是 0),但是 Java 和 Swift 之间分配它们的规则略有不同。
    【解决方案3】:

    披露:我对 Java 知之甚少,所以我的答案来自 C++/Objective-C/Swift 的角度。

    NSHipster 的 Matt Thompson 有一篇很棒的文章,介绍了它以及它与 Objective-C 与 C 的关系。您可以在 here 找到它。

    答案基本上可以归结为:你应该认为它是一样的。

    • 0 是您如何代表原始值的任何内容
    • NULL 是 C 指针字面量的表达方式
    • nil 是您对文字 Objective-C/Swift 对象不表示任何内容的方式

    【讨论】:

      猜你喜欢
      • 2010-10-16
      • 1970-01-01
      • 2014-07-25
      • 1970-01-01
      • 1970-01-01
      • 2011-10-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-05
      相关资源
      最近更新 更多