例如,我想编写一个扩展程序来对符合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?,但我需要可选元素,而不是可选数组。
这可能对您有帮助:
extension Array {
func foo<T: Equatable>() where Element == Optional<T> {
...
}
}