Array的count属性是可选的吗?

时间:2016-11-09 22:35:31

标签: arrays swift optional

我创建了一个类型别名:

typealias areasOfStudyType = Array<Dictionary<String, String>>

然后创建一个可选变量:

var areasOfStudy : areasOfStudyType? = nil

我需要使用数组中的元素数将它们放在表视图中,这样我就输入了:

areasOfAStudy?.count

我理解,如果areasOfStudynil,则此行代码不会尝试获取count值,因为我使用了可选链接。但是,如果它不是nil,它将返回Int

然而,编译器抱怨我没有打开一个可选项,并建议我输入:

(areasOfAStudy?.count)!

为什么areasOfAStudy?.count是可选的?当我查看Array的参考文档时,我读到了:

  

计数
  Array存储的元素数量。

     

宣言
  var count:Int {get}

2 个答案:

答案 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,假设propertynonOptional不是可选的,那么value将不是可选的。

但是,即使let value = optionalObject?.property未被定义为可选项property,您也可以通过可选链接(?.的含义)访问它,因为{{1} }是可选的,然后optionalObject也是可选的,因为value可能是optionalObject