Array 的 count 属性 是可选的吗?
Is Array's count property an optional?
我创建了一个类型别名:
typealias areasOfStudyType = Array<Dictionary<String, String>>
然后创建了一个可选变量:
var areasOfStudy : areasOfStudyType? = nil
我需要使用数组元素的数量将它们放在 table 视图中,所以我输入了:
areasOfAStudy?.count
我知道如果 areasOfStudy
是 nil
这行代码不会尝试获取 count 的值,因为我使用的是可选链接。但是当它不是 nil
时,它将 return 一个 Int
.
然而,编译器抱怨我没有解包一个可选的并建议我输入:
(areasOfAStudy?.count)!
为什么 areasOfAStudy?.count
是可选的?当我查看 Array 的参考文档时,我读到:
count
The number of elements the Array stores.
Declaration
var count: Int { get }
计数不是可选的,但数组是。因此 areasOfAStudy?.count 是可选的,因为当 areasOfAStudy 为 nil 时,永远不会调用 count,因此它计算为 nil。
var areasOfAStudy: [String]? = nil
//This evaluates to nil because areasOfAStudy is nil. The type of a is Int?
var a = areasOfAStudy?.count
print(type(of:a))
这就是可选链的工作原理。
如果您有 let value = nonOptional.property
,假设 property
和 nonOptional
不是可选的,那么 value
将不是可选的。
但是,如果您执行 let value = optionalObject?.property
,即使 property
未定义为可选,您也可以通过可选链接访问它(这就是 ?.
的意思)所以因为 optionalObject
是可选的,那么 value
也是可选的,因为 optionalObject
可以是 nil
.
我创建了一个类型别名:
typealias areasOfStudyType = Array<Dictionary<String, String>>
然后创建了一个可选变量:
var areasOfStudy : areasOfStudyType? = nil
我需要使用数组元素的数量将它们放在 table 视图中,所以我输入了:
areasOfAStudy?.count
我知道如果 areasOfStudy
是 nil
这行代码不会尝试获取 count 的值,因为我使用的是可选链接。但是当它不是 nil
时,它将 return 一个 Int
.
然而,编译器抱怨我没有解包一个可选的并建议我输入:
(areasOfAStudy?.count)!
为什么 areasOfAStudy?.count
是可选的?当我查看 Array 的参考文档时,我读到:
count
The number of elements the Array stores.Declaration
var count: Int { get }
计数不是可选的,但数组是。因此 areasOfAStudy?.count 是可选的,因为当 areasOfAStudy 为 nil 时,永远不会调用 count,因此它计算为 nil。
var areasOfAStudy: [String]? = nil
//This evaluates to nil because areasOfAStudy is nil. The type of a is Int?
var a = areasOfAStudy?.count
print(type(of:a))
这就是可选链的工作原理。
如果您有 let value = nonOptional.property
,假设 property
和 nonOptional
不是可选的,那么 value
将不是可选的。
但是,如果您执行 let value = optionalObject?.property
,即使 property
未定义为可选,您也可以通过可选链接访问它(这就是 ?.
的意思)所以因为 optionalObject
是可选的,那么 value
也是可选的,因为 optionalObject
可以是 nil
.