我会说这个问题与扩展名的正确声明有关。
我想扩展用通用Element填充的Array,其中Element符合Equatable。我设法做到了:
extension Array where Element: Equatable{
// my code
}
但是,当充满Equatable元素的数组位于Optional内部时,我想知道如何正确声明扩展名?我知道在这种情况下,我实际上是扩展了Optional协议,但我想不通其余的
我在想类似的东西:
extension Optional where Wrapped: Array & Equatable {
// my code
}
无法弄清楚。 有任何想法吗 ?
答案 0 :(得分:4)
Cristik提供了一个很好的解决方案。一种替代方法是为可等同元素的可选 collection 编写扩展:
extension Optional where Wrapped: Collection, Wrapped.Element: Equatable {
func foo() { }
}
这将适用于数组,数组切片和其他集合。
根据扩展名的作用,您可能需要使用Collection
,MutableCollection
,BidirectionalCollection
,RandomAccessCollection
的组合。
答案 1 :(得分:3)
我认为您不能在扩展级别上指定此约束,但是您应该能够在功能级别上指定它:
extension Optional {
func myFunc<T: Equatable>() where Wrapped == [T] {
// do your thing
}
}