Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 是数组';s count属性是可选的吗?_Arrays_Swift_Optional - Fatal编程技术网

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))