此问题已经在这里有了答案:
我想进行有效性检查并迅速在数组中返回适当的值,例如下面的函数objectFromArr(at:)。
var arr = [10, 20, 30, 40]
func objectFromArr(at: Int) -> Int? {
return at < 0 || at >= arr.count ? nil : arr[at]
}
我不想使用功能。由于快速,Array通常使用下标来获取对象。因此,如果可能的话,我想覆盖下标。
@inlinable public subscript(index: Int) -> Element
to
override @inlinable public subscript(index: Int) -> Element?
您不能覆盖现有的下标,有两个原因:
相反,只需定义一个新的扩展名:
extension Collection {
subscript(safelyAccess index: Index) -> Element? {
get { return self.indices.contains(index) ? self[index] : nil }
}
}
let a = [1, 2, 3]
print(a[safelyAccess: 99]) // => nil