Diría que este problema se trata de una declaración de extensión adecuada.
Me gustaría extender Array lleno de elementos genéricos, donde Element se ajusta a Equatable. Me las arreglé para hacer eso por:
extension Array where Element: Equatable{ // my code }Sin embargo, me gustaría saber cómo declarar correctamente la extensión cuando la matriz llena de elementos equivalentes está dentro de un opcional. Sé que en este caso en realidad estoy extendiendo el protocolo Opcional, pero no puedo descifrar el resto
Estaba pensando en algo como:
extension Optional where Wrapped: Array & Equatable { // my code }No puedo entenderlo. Algunas ideas ?
No creo que no pueda especificar esta restricción en el nivel de extensión, sin embargo, debería poder especificarla en el nivel de función:
extension Optional { func myFunc<T: Equatable>() where Wrapped == [T] { // do your thing } }Cristik proporcionó una buena solución. Una alternativa es escribir una extensión a una colección opcional de elementos equiparables:
extension Optional where Wrapped: Collection, Wrapped.Element: Equatable { func foo() { } }Esto sería aplicable a arreglos, segmentos de arreglos y otras colecciones.
Según lo que haga la extensión, es posible que desee utilizar una combinación de Collection , MutableCollection , BidirectionalCollection , RandomAccessCollection .