Swift语言中的null/nil

82

我们如何用 Swift 编程语言定义以下术语:

  • null
  • nil
  • Nil
  • [NSNull null]

换句话说,每个 Objective-C 术语在 Swift 中的等效术语是什么。 此外,是否存在非 Objective-C 类型(如结构体和枚举)的特定用例。


标签问题是关于“可能缺失的值”,而我对不同类型/变体感兴趣。相关但不重复。 - Mehul Parmar
1
你会发现它们是一样的。 - CrimsonChris
6个回答

130

关于等价物:

  • NULL在Swift中没有等价物。
  • nil在Swift中也称为nil
  • Nil在Swift中没有等价物。
  • [NSNull null]可以在Swift中作为NSNull()访问。

注意:这些是我根据阅读和尝试猜测的。欢迎纠正。

但是在Swift中,与Objective C不同,对于nil/NULL的处理方式非常不同。它看起来旨在强制执行安全和谨慎。请阅读手册中的可选项。一般来说,变量根本不能为NULL,在需要表示“没有值”的情况下,您可以通过声明来实现。


你如何声明一个缺失的值以进行检查?就像Objective-C中的== nil。 - Juan Boero
@JuanPabloBoero 请看下面我的回复 - Ciprian
2
在 Obj-C 中 NULL 意味着“用于 plain-C 的零指针”。由于 Swift 兼容 C 库,因此 @Rien 在下面给出的答案是我所知道的 NULL 等效的最佳答案。 - Slipp D. Thompson

22

如果您需要在低级指针操作中使用 NULL,请使用以下内容:

UnsafePointer<Int8>.null()

我得到了“没有成员null”的错误。 - benwiggy

13

nil 表示“没有值”,但在其他方面与 Objective-C 中的 nil 完全不同。

它只能分配给可选变量。它适用于字面值和结构体(即它适用于基于堆栈的项目,而不仅仅是基于堆的项目)。

非可选变量不能被赋予 nil,即使它们是类(即它们存储在堆上)。

所以,它明确不是一个空指针,也不类似于空指针。它之所以使用相同的名称,是因为它旨在用于相同的语义原因。


8

Swift的nil与Objective-C中的nil不同。
在Objective-C中,nil是指向不存在对象的指针。在Swift中,nil不是指针,而是某种类型的值的缺失。任何类型的可选项都可以被设置为nil,不仅仅是对象类型。

  • NULL在Swift中没有相应的等价物。

  • nil在Swift中也被称为nil

  • Nil在Swift中没有相应的等价物

  • [NSNull null]可以在Swift中通过NSNull()访问


5
Swift 中的 Null 概念归结为 Optional 枚举。该枚举的定义如下:
enum Optional<T> {
  case Some(T)
  case None
}

这意味着在Swift中你不能有未初始化的变量/常量。如果你尝试这样做,你会得到一个编译器错误,说这个变量/常量不能被未初始化。你需要将它包装在Optional枚举中。

这是你在Swift中唯一会遇到的Null概念。


0
if !(myDATA is NSNull) {
// optional is NOT NULL, neither NIL nor NSNull
} else {
// null
}

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