Arrays 是数组';s count属性是可选的吗?
我创建了一个类型别名:Arrays 是数组';s count属性是可选的吗?,arrays,swift,optional,Arrays,Swift,Optional,我创建了一个类型别名: typealias areasOfStudyType = Array<Dictionary<String, String>> 我需要使用数组的元素数将它们放入表视图中,因此我键入: areasOfAStudy?.count 我知道如果areasOfStudy为nil这行代码不会尝试获取count的值,因为我使用的是可选链接。但是当它不是nil时,它将返回Int 但是,编译器抱怨我没有打开可选文件,并建议我键入: (areasOfAStudy?.
typealias areasOfStudyType = Array<Dictionary<String, String>>
我需要使用数组的元素数将它们放入表视图中,因此我键入:
areasOfAStudy?.count
我知道如果areasOfStudy
为nil
这行代码不会尝试获取count的值,因为我使用的是可选链接。但是当它不是nil
时,它将返回Int
但是,编译器抱怨我没有打开可选文件,并建议我键入:
(areasOfAStudy?.count)!
为什么区域是astudy?.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
可选链接返回可选的…太棒了!你指出了正确的问题。Swift编程语言书中写道:“为了反映可选链接可以在nil值上调用的事实,可选链接调用的结果始终是可选值,即使您查询的属性、方法或下标返回非可选值”,摘自:Apple Inc.《Swift编程语言》(Swift 3)我的书。这回答了我的问题。谢谢这也回答了我的问题。谢谢
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))