我很难理解为什么optionals数组在这种情况下返回双包装的optional,以及如何避免它:

class MyBanana {

}

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

在最后一行,我得到以下错误:
无法转换“MyBanana”类型的值??'到指定类型'MyBanana'

最佳答案

您有一个可选的MyBananas数组,.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已经给了您一个可选元素。

10-02 02:23