如何扩展协议 Optional,其中 Wrapped 项目是 Equatable 通用元素数组?
How to extend protocol Optional, where Wrapped item is Array of Equatable generic elements?
我会说这个问题是关于正确声明扩展的。
我想扩展充满通用元素的数组,其中元素符合 Equatable。我设法做到了:
extension Array where Element: Equatable{
// my code
}
但是我想知道当充满 Equatable 元素的 Array 在 Optional 中时如何正确声明扩展?我知道在这种情况下我实际上是在扩展协议 Optional,但我想不出其余的
我在想:
extension Optional where Wrapped: Array & Equatable {
// my code
}
想不通。
有任何想法吗 ?
我认为您不能在扩展级别指定此约束,但是您应该能够在功能级别指定它:
extension Optional {
func myFunc<T: Equatable>() where Wrapped == [T] {
// do your thing
}
}
Cristik 提供了一个很好的解决方案。另一种方法是编写一个可选的 collection 等价元素的扩展:
extension Optional where Wrapped: Collection, Wrapped.Element: Equatable {
func foo() { }
}
这适用于数组、数组切片和其他集合。
根据扩展程序的功能,您可能需要组合使用 Collection
、MutableCollection
、BidirectionalCollection
、RandomAccessCollection
.
我会说这个问题是关于正确声明扩展的。
我想扩展充满通用元素的数组,其中元素符合 Equatable。我设法做到了:
extension Array where Element: Equatable{
// my code
}
但是我想知道当充满 Equatable 元素的 Array 在 Optional 中时如何正确声明扩展?我知道在这种情况下我实际上是在扩展协议 Optional,但我想不出其余的
我在想:
extension Optional where Wrapped: Array & Equatable {
// my code
}
想不通。 有任何想法吗 ?
我认为您不能在扩展级别指定此约束,但是您应该能够在功能级别指定它:
extension Optional {
func myFunc<T: Equatable>() where Wrapped == [T] {
// do your thing
}
}
Cristik 提供了一个很好的解决方案。另一种方法是编写一个可选的 collection 等价元素的扩展:
extension Optional where Wrapped: Collection, Wrapped.Element: Equatable {
func foo() { }
}
这适用于数组、数组切片和其他集合。
根据扩展程序的功能,您可能需要组合使用 Collection
、MutableCollection
、BidirectionalCollection
、RandomAccessCollection
.