扩展可选等式数组?

Extend an Array of Optional Equatables?

我想编写一个扩展,用于对符合 Equatable 的可选值数组进行操作,例如:

class Bar: Equatable { ... }

let bar1 = Bar()
let bar2 = Bar()
let bars: [Bar?] = [ bar1, bar2, nil ]
bars.foo() <-- this guy

有没有办法用 Swift 做到这一点?我尝试过很多类似的变体:

extension Array where Element == Optional<Equatable> {
    func foo() { ... }
}

我明白为什么 Equatable 不开心,但有什么办法解决这个问题吗?

我发现这个问题非常相似: 但我需要可选元素,而不是可选数组。

正如评论中提到的你不能做的:

extension Array where Element == Optional<Equatable>

但您可以在 Array 扩展中创建通用函数:

extension Array {
    func foo<T: Equatable>() where Element == Optional<T> {
        ...
    }
}