Swift - 可选对象的集合 .first 返回双包装的 Optional



我正在努力理解为什么在这种情况下,可选数组.first返回双包装可选以及如何避免它:

class MyBanana {
}
let bananas = [MyBanana?]()
let first: MyBanana? = bananas.first

在最后一行,我收到以下错误:

无法将类型"MyBanana??"的值转换为指定类型"MyBanana?">

你有一个 Optional MyBanana s 数组,.first 会给你数组的第一个元素作为可选元素。

在数组上调用.first等效于以下代码片段:

if array.count == 0 {
    return nil
} else {
    return array[0]
}

这是获取数组第一个元素的安全方法。

当你在 Array<T> 类型的数组上调用 .first 时,你会得到一个 T? 类型的元素。 bananas属于 Array<MyBanana?> 型。因此,T = MyBanana?.first 返回类型为 T? = MyBanana?? 的元素。

我强烈建议你不要保留一个可选元素数组,因为.first已经给你一个可选元素了。

我是这样解决的:

let first: MyBanana? = bananas.isEmpty ? nil : bananas[0]

虽然,在我看来,first应该处理这种情况而不抱怨。

最新更新