我很难理解为什么optionals数组在这种情况下返回双包装的optional,以及如何避免它:
class MyBanana {
}
let bananas = [MyBanana?]()
let first: MyBanana? = bananas.first
在最后一行,我得到以下错误:
无法转换“MyBanana”类型的值??'到指定类型'MyBanana'
最佳答案
您有一个可选的MyBanana
s数组,.first
将返回数组的第一个元素作为可选元素。
对数组调用.first
相当于此代码段:
if array.count == 0 {
return nil
} else {
return array[0]
}
这是获取数组第一个元素的安全方法。
当对
.first
类型的数组调用Array<T>
时,会返回T?
类型的元素。bananas
属于Array<MyBanana?>
类型。因此,T = MyBanana?
和.first
返回一个T? = MyBanana??
类型的元素。我强烈建议您不要保留可选元素的数组,因为
.first
已经给了您一个可选元素。