题 在快速语言中为null / nil


我们如何在swift编程语言中定义以下内容:

  • 空值
  • [NSNull null]

换句话说,这些客观c术语中的每一个都是迅速等价的。 此外,还想知道是否存在非结构c类型(如结构和枚举)的特定用例。提前致谢。


58
2018-06-04 17:13


起源


标记的问题是“可能缺失值”,而我对这些的不同类型/变体感兴趣。相关,但不重复。 - Mehul Parmar
你会发现他们是同一个人。 - CrimsonChris


答案:


关于等价物:

  • NULL 在Swift中没有相同的东西。
  • nil 也被称为 nil 在斯威夫特
  • Nil 在Swift中没有相同的东西
  • [NSNull null] 可以在Swift中访问NSNull()

注意:这些是基于阅读和游戏的猜测。更正欢迎。

但是Swift中的nil / NULL处理与Objective C非常不同。它看起来旨在强制执行安全和护理。阅读 手册中的选项。一般来说,变量根本不能为NULL,当您需要表示“缺少值”时,您将以声明方式执行此操作。


107
2018-06-04 17:22



+1提及期权。 - CrimsonChris
您如何申报缺席检查?喜欢== nil of Objective-c - Juan Boero
@JuanPabloBoero请参阅下面的回复 - Ciprian
Obj-C中的NULL表示“与plain-C一起使用的零指针”。由于Swift与C库兼容,@ Rien的答案是我所知道的最佳答案 NULL相当于。 - Slipp D. Thompson


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

UnsafePointer<Int8>.null()

18
2017-11-27 11:42





nil 意味着“没有价值”,但与Objective-C的其他意义完全不同 nil

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

无法分配非可选变量 nil 即使他们是班级(即他们住在堆里)。

所以它显然不是一个 NULL 指针与一个不相似。它共享名称,因为它旨在用于相同的语义原因。


11
2018-06-04 17:30





Swull中Null的概念恢复为Optional枚举。枚举是这样定义的

enum Optional<T> {
  case Some(T)
  case None
}

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

这是您在Swift中可以找到的唯一Null概念


5
2017-09-01 11:26





斯威夫特 nil 是不一样的 nil 在Objective-C中。
在Objective-C中, nil 是指向不存在的对象的指针。在斯威夫特, nil 不是指针 - 它缺少某种类型的值。任何类型的选项都可以设置为 nil,而不仅仅是对象类型。

NULL 在Swift中没有相同的东西。

nil 在斯威夫特也被称为零

Nil 在Swift中没有相同的东西

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


4
2017-07-08 08:00





我在一个有问题的场景中遇到了这个问题:设置包

所以有人不浪费他的时间(因为我失去了它!)

    let userDefaults = UserDefaults.standard

    var settingsValue = userDefaults.string(forKey: "user_preference")

    if settingsValue == nil {
        settingsValue = "1"
    }

    if (settingsValue?.isEqual("1"))! {
        //Do something

    } else {
        //Do something
    }

在用户第一次打开App设置之前,系统返回nil。而且,在我的情况下,应用程序 崩溃


0
2018-05-04 16:17





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

0
2017-08-02 15:06