【问题标题】:null / nil in swift languageswift 语言中的 null / nil
【发布时间】:2014-07-25 11:11:52
【问题描述】:

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

  • [NSNull null]

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

【问题讨论】:

  • 标记的问题是关于“可能缺少值”,而我对这些的不同类型/变体感兴趣。相关,但不重复。
  • 你会发现它们是一回事。

标签: ios swift


【解决方案1】:

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

  • NULL 在 Swift 中没有等价物。

  • nil 在 Swift 中也称为 nil

  • Nil 在 Swift 中没有等价物

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

【讨论】:

    【解决方案2】:
    if !(myDATA is NSNull) {
    // optional is NOT NULL, neither NIL nor NSNull
    } else {
    // null
    }
    

    【讨论】:

      【解决方案3】:

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

      UnsafePointer<Int8>.null()
      

      【讨论】:

        【解决方案4】:

        Swift 中 Null 的概念延续到 Optional 枚举。枚举是这样定义的

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

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

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

        【讨论】:

          【解决方案5】:

          nil 的意思是“没有价值”,但在任何其他意义上都与 Objective-C 的 nil 完全不同。

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

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

          所以它明确不是NULL 指针,也不类似于指针。它共享名称是因为它旨在用于相同的语义原因。

          【讨论】:

            【解决方案6】:

            关于等价物:

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

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

            但是 Swift 中的 nil/NULL 处理与 Objective C 非常不同。它看起来旨在强制安全和小心。阅读optionals in the manual。一般来说,变量根本不能为 NULL,当您需要表示“缺少值”时,您可以声明式地这样做。

            【讨论】:

            • 您将如何声明没有要检查的价值?像 == nil of Objective-c
            • @JuanPabloBoero 请参阅下面的回复
            • Obj-C 中的 NULL 表示“用于纯 C 的零指针”。由于 Swift 与 C 库兼容,@Rien 下面的答案是我所知道的NULL 等效的最佳答案。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-07-24
            • 1970-01-01
            • 2014-07-29
            • 1970-01-01
            相关资源
            最近更新 更多