【问题标题】:Extend an Array of Optional Equatables?扩展一个可选的 Equatables 数组?
【发布时间】:2020-09-20 08:13:53
【问题描述】:

我想写一个扩展来操作符合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? 但我需要可选元素,而不是可选数组。

【问题讨论】:

  • 您遇到的问题是没有可选的 Equatable 这样的东西。它与数组无关。

标签: arrays swift generics protocols


【解决方案1】:

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

extension Array where Element == Optional<Equatable>

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    • 2020-08-15
    • 1970-01-01
    • 2010-10-28
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多