首页 > 解决方案 > 扩展一个可选的 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不开心,但有办法解决吗?

我发现这个问题非常相似:How to extend protocol Optional, where Wrapped item is Array of Equatable generic elements?但我需要可选元素,而不是可选数组。

标签: arraysswiftgenericsprotocols

解决方案


如评论中所述,您不能这样做:

extension Array where Element == Optional<Equatable>

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

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

推荐阅读