2014-06-09 8 views
18

Wenn ich Nest eine Klasse innerhalb einer generischen Struktur und versuchen, den Gleichheitsoperator, wie dies umzusetzen:Wie implementiere ich einen Operator für eine Klasse, die in einer generischen Struktur verschachtelt ist?

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

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

bekomme ich folgende Fehlermeldung, wenn ich das Projekt auszuführen versuchen:

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 

jedoch es funktioniert gut, wenn ich das gleiche tun, um die Klasse ohne Verschachtelung:

class MyClass : Equatable {} 

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

Ist das ein Fehler mit dem Compiler, oder bin ich etwas falsch?

+8

Dies ist ein Fehler in der Compiler, sollten Sie es melden. –

+0

Ja zur Zeit Klassenvariablen werden nicht unterstützt ... was die Ursache sein könnte – Jack

+4

Hier werden keine Klassenvariablen verwendet, und das Gleiche passiert, wenn sie beide Strukturen sind. – Jay

Antwort

4

Nesting ein class oder struct in einem generischen Typ struct nun als ungültig durch XCode6 Beta6

enter image description here

gekennzeichnet
+0

Irgendeine Idee, was die Logik hier ist oder ist es ein Compiler-Fehler? – Tylerc230

+1

Ab Xcode 6.1.1 wird es immer noch als ungültig markiert. Ich würde sagen, es ist eine schnelle Sprachfunktion. Sie müssen wahrscheinlich im Apple Swift Forum nach dem Grund dafür fragen. Es wird nicht als Compiler-Fehler betrachtet (ein Compiler-Fehler ist, vom schnellen Team-POV, was zum Absturz von XCode führt) –

1

Sie konnten die innere Klasse in einer separaten Datei oder Raum definieren, das seine Betreiber dann ein machen var dieser Art in Ihrer inneren Klasse:

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

Ab beta 6

Verwandte Themen