【发布时间】:2015-12-05 00:03:16
【问题描述】:
我来自 Java/Android 背景,我们使用 NULL。现在我正在做 Swift/iOS,我对 Swift 的 nil 的含义感到困惑。
我可以在 Java 中像 NULL 一样使用它吗?它的行为方式是否完全相同,或者它的用法有什么不同?
【问题讨论】:
我来自 Java/Android 背景,我们使用 NULL。现在我正在做 Swift/iOS,我对 Swift 的 nil 的含义感到困惑。
我可以在 Java 中像 NULL 一样使用它吗?它的行为方式是否完全相同,或者它的用法有什么不同?
【问题讨论】:
你可以认为'null'和'nil'是一样的。语言是否包含可选项是一个单独的问题。
Objective-C,有 'nil',但没有内置的可选项,而 Swift 有。类似地,Java 有“null”,但没有隐式可选项,而 Kotlin、Scala 和 Ceylon 等几种 JVM 语言有,而且在 Swift 之前就有。  
这里有一篇文章比较了 Kotlin、Scala 和 Swift 中的 null、nil 和可选项:http://codemonkeyism.com/comparing-optionals-and-null-in-swift-scala-ceylon-and-kotlin/
【讨论】:
Swift 目前不支持空值合并运算符。
Swift nil 解释
nil 表示“没有价值”。非可选变量不能分配nil,即使它们是类,所以它明确不是null 指针,也不类似于指针。
我可以推荐你阅读更多关于 Swift 中的optionals。
【讨论】:
null是一种类型,可以强制转换为任何非原始引用类型; nil 也可以转换为任何引用类型,只要它被声明为可选的。主要区别更多的是关于变量的设置,而不是 null/nil 值。总的来说,null/nil 基本相同(缺少值,不是 0),但是 Java 和 Swift 之间分配它们的规则略有不同。