Как реализовать оператор для класса, вложенного в общую структуру?

Когда я вставляю класс внутри общей структуры и пытаюсь реализовать оператор равенства, например:

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

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

При попытке запустить проект я получаю следующую ошибку:

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

Однако он отлично работает, когда я делаю то же самое, не вставляя класс:

class MyClass : Equatable {}

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

Является ли это ошибкой с компилятором, или я делаю что-то неправильно?

Ответы

Ответ 1

Вложение a class или struct в структуре типа generic теперь помечено как недопустимое с помощью XCode6 Beta6

enter image description here

Ответ 2

Вы можете определить класс Inner в отдельном файле или пробеле, указав его оператор, затем введите var этого типа в свой внутренний класс:

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

По состоянию на бета 6