如何在 Swift 中描述一个 nil 对象的存在及其值



可以说 Swift 中存在一个 nil 对象吗?因此,以声明为可选类型的数组为例。

var books : [Book]?

这个数组开始时是一个 nil 对象,但它是否仍然以某种方式存在,因为它被声明为可选,这表明它可能在某个时候有一个值?

仅仅就正确描述和理解一个 nil 对象而言,这是否准确:"一个 nil 对象还不存在,也没有价值,但后来可以通过被赋予一个值而存在"?

在 Swift 中,可选可以包含 nil ,但nil本身表示缺少值。当你写一些你描述的东西时:

var books : [Book]?

空间被分配以在未来可能包含某些东西,并且它被初始化为一个Optional<Array<Book>>,但它的值被分配为nil,这实际上不存在。 nil在技术上只是一个思想价值,因为变量可以nil赋值。实际上,它是缺少一个 value

Swift 的可选类型是使用枚举实现的

enum OptionalValue<T> {
    case none
    case some(T)
}

因此,当 nil 分配给可选值时,我认为它分配了none情况。 并分配了适当的内存。

您可以在此处获取更多详细信息:- https://github.com/apple/swift/blob/master/stdlib/public/core/Optional.swift

变量books存在,但它不是对象。 它具有值 OptionalValue.none .

一个

值(或引用)以后可以分配给一个可选变量,但这并不能"使变量存在";它一直存在,只是没有分配给它。

创建分配给变量的对象

、值或结构与创建变量本身是分开的。

正如 Aks 在他的答案中所说,可选的是具有两个可能值的枚举,.some.none

引用Aks的回答(和Apple文档):

enum OptionalValue<T> {
    case none
    case some(T)
}

.none事例不包含关联的值。

.some事例包含关联的值。

Swift 枚举是使用泛型定义的,因此你可以有一个带有类型的可选枚举,如 Optional(Int)。

创建可选时,您将定义一个枚举。该枚举存在。把它想象成一个盒子。该框可能是空的(.none大小写),也可能包含某些内容(.some大小写),但该框在创建时存在。

最新更新