programacion poo parametrizada metodos listas interfaces genericos genericas colecciones clases clase generics nested operators swift equality

generics - poo - listas genericas c#



¿Cómo implemento un operador para una clase anidada en una estructura genérica? (2)

Anidar una class o struct en una estructura de tipo genérico ahora está marcado como no válido por XCode6 Beta6

Cuando anido una clase dentro de una estructura genérica y trato de implementar el operador de igualdad, como esto:

struct Outer<T> { class Inner : Equatable {} } @infix func == <T>(lhs: Outer<T>.Inner, rhs: Outer<T>.Inner) -> Bool { return lhs === rhs }

Recibo el siguiente error cuando intento ejecutar el proyecto:

While emitting IR SIL function @_TFCC4Test5Outer5InnerCU__fMS1_FT_S1_ for ''init'' at .../Testing.swift:20:11 <unknown>:0: error: unable to execute command: Segmentation fault: 11 <unknown>:0: error: swift frontend command failed due to signal (use -v to see invocation) Command /Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift failed with exit code 254

Sin embargo, funciona bien cuando hago lo mismo sin anidar la clase:

class MyClass : Equatable {} @infix func == (lhs: MyClass, rhs: MyClass) -> Bool { return lhs === rhs }

¿Es esto un error con el compilador, o estoy haciendo algo mal?


Podría definir la clase interna en un archivo o espacio separado, definiendo su operador y luego hacer una var de ese tipo en su clase interna:

class Inner: Equatable {} func == (left: Inner, right: Inner) -> Bool { return true } struct Outer { var myVar: Inner }

A partir de beta 6