我有一个数组String?
like so
var myArray: [String?] = ["2", "banana", nil, "31"];
我还有另一个数组String
像这样:
var myStringArray: [String] = ["2", "3"]
我为 Array 编写了一个扩展,以便在索引无效时返回可选值(这可以避免整个应用程序崩溃),但我真的只希望它在以下情况下返回可选值:Element
不是可选的,如果是可选的则返回 Element
func safeIndex(_ index: Int) -> Element? {
if self.indices.contains(index) {
return self[index]
}
return nil
}
如果我运行这个myArray
结果类型是String??
let item = myArray.safeIndex(1) // item is String??
let strItem = myStringArray.safeIndex(99) // strItem is String?
我如何更改我的扩展名,以便它给我String?
对于这两种情况
注意:如果我明确说明我的类型,我就可以得到我想要的东西
extension Array where Element == String? {
func safeIndex(_ index: Int) -> String? {
if self.indices.contains(index) {
return self[index]
}
return nil
}
}
然而,这种方法要求我为数组中可能拥有的一堆类型编写一堆扩展,这是一个巨大的数组。