2014-06-09 15 views
18

Quando ho nido una classe all'interno di una struttura generica e cercare di implementare l'operatore di uguaglianza, in questo modo:Come si implementa un operatore per una classe annidata in una struttura generica?

struct Outer<T> { 
    class Inner : Equatable {} 
} 

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

ricevo il seguente errore quando si tenta di eseguire il progetto:

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 

Tuttavia , funziona benissimo quando faccio la stessa cosa senza la nidificazione della classe:

class MyClass : Equatable {} 

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

è questo un bug con il compilatore, o sto facendo qualcosa di sbagliato?

+8

Questo è un bug nel il compilatore, dovresti segnalarlo. –

+0

Sì attualmente Le variabili di classe non sono supportate ... che potrebbe essere la causa qui – Jack

+4

Qui non ci sono variabili di classe usate qui, e la stessa cosa accade se sono entrambe le strutture. – Jay

risposta

4

Nidificazione un class o struct in un tipo struct generica è ora contrassegnato come non validi dal XCode6 Beta6

enter image description here

+0

Qualche idea su quale sia la logica o sia un bug del compilatore? – Tylerc230

+1

A partire da Xcode 6.1.1 è ancora contrassegnato come non valido. Direi che è una funzionalità linguistica veloce. Probabilmente devi chiedere nel forum di Apple Swift la logica che c'è dietro. Non è considerato un bug del compilatore (un bug del compilatore è, dal rapido POV del team, che cosa causa l'arresto di XCode) –

1

Si potrebbe definire la classe interna in un file separato o uno spazio, definendo il suo operatore poi fare una var di quel tipo nella classe interna:

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

a partire dal beta 6

Problemi correlati