【问题标题】: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??)。

标签: swift


【解决方案1】:

我很确定这个数组的第一个元素不是 nil

是的,但它的实现不知道,它也是在不存在值的情况下编写的,所以可选来救援

extension Array { 
   @inlinable public var first: Element? { get }
}

【讨论】:

    【解决方案2】:

    正如你所说,是确定第一个元素不是nil的人。所以应该强迫编译器解开它!

    编译器唯一知道的是数组可能是空的,例如:[],并且其中没有元素,所以即使你确定它也会返回可选的。

    所以如果你真的确定,就强行打开它:

    x.first!.count
    

    【讨论】:

    • x[0].count
    猜你喜欢
    • 2013-04-23
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-24
    • 2016-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多