我正在努力理解为什么在这种情况下,可选数组.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
应该处理这种情况而不抱怨。