为啥在这种情况下 Array 的元素是可选的?
Posted
技术标签:
【中文标题】为啥在这种情况下 Array 的元素是可选的?【英文标题】:Why are elements of Array in this case optional?为什么在这种情况下 Array 的元素是可选的? 【发布时间】:2019-09-01 13:03:27 【问题描述】:let x = Array(repeating: "test", count: 3)
x.first.count
我有一个错误: “可选类型‘字符串’的值?必须解包以引用已包装的基本类型'String'的成员'count'"
我为什么要写:x.first?.count
?
我很确定这个数组的第一个元素不是 nil
【问题讨论】:
你确定,但编译器不是。 另外,可选性不是关于第一个元素为nil
的可能性,而是关于数组为空的可能性(因此,根本没有第一个元素)。如果一个元素可以是可选的(例如[String?]
),那么first
实际上会返回一个双可选(String??
)。
【参考方案1】:
我很确定这个数组的第一个元素不是 nil
是的,但它的实现不知道,它也是在不存在值的情况下编写的,所以可选来救援
extension Array
@inlinable public var first: Element? get
【讨论】:
【参考方案2】:正如你所说,你是确定第一个元素不是nil
的人。所以你应该强迫编译器解开它!
编译器唯一知道的是数组可能是空的,例如:[]
,并且其中没有元素,所以即使你确定它也会返回可选的。
所以如果你真的确定,就强行打开它:
x.first!.count
【讨论】:
或x[0].count
以上是关于为啥在这种情况下 Array 的元素是可选的?的主要内容,如果未能解决你的问题,请参考以下文章
scss 增加给定元素的可定位区域而不影响布局。需要垂直增加;水平是可选的。
为啥 UITableViewCell textLabel 属性是可选的?