我创建了一个类型别名:
typealias areasOfStudyType = Array<Dictionary<String, String>>
然后创建一个可选变量:
var areasOfStudy : areasOfStudyType? = nil
我需要使用数组中的元素数将它们放在表视图中,这样我就输入了:
areasOfAStudy?.count
我理解,如果areasOfStudy
为nil
,则此行代码不会尝试获取count值,因为我使用了可选链接。但是,如果它不是nil
,它将返回Int
。
然而,编译器抱怨我没有打开一个可选项,并建议我输入:
(areasOfAStudy?.count)!
为什么areasOfAStudy?.count
是可选的?当我查看Array的参考文档时,我读到了:
计数
Array存储的元素数量。宣言
var count:Int {get}
答案 0 :(得分:1)
计数不是可选的,但数组是。因此,AreaOfAStudy?.count是可选的,因为当AreasOfAStudy为零时,永远不会被调用,因此它将评估为零。
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))
答案 1 :(得分:1)
这就是可选链接的工作原理。
如果您有let value = nonOptional.property
,假设property
且nonOptional
不是可选的,那么value
将不是可选的。
但是,即使let value = optionalObject?.property
未被定义为可选项property
,您也可以通过可选链接(?.
的含义)访问它,因为{{1} }是可选的,然后optionalObject
也是可选的,因为value
可能是optionalObject
。