Swift2 Swift中嵌套类型的扩展

Swift2 Swift中嵌套类型的扩展,swift2,Swift2,我有一个主类,还提供了一个名称空间: class A { } 以及通过扩展添加的嵌套类(都是为了使用单独的文件): 我想通过扩展嵌套类(B)向其添加功能;我试过: extension A.B { } 我得到“'B'不是'a'的成员类型” (我也尝试过一些不太合理的事情,但为了避免尴尬,我将在这里省略它们。阅读Swift文档和搜索“Swift嵌套类扩展”也没有得到答案。) 你知道这是否以及如何实现吗 更新: 多亏了用户3441734的试用,这段代码在单个文件中(或在游乐场中)可以正常工作 当

我有一个主类,还提供了一个名称空间:

class A {
}
以及通过扩展添加的嵌套类(都是为了使用单独的文件):

我想通过扩展嵌套类(B)向其添加功能;我试过:

extension A.B {
}
我得到“'B'不是'a'的成员类型”

(我也尝试过一些不太合理的事情,但为了避免尴尬,我将在这里省略它们。阅读Swift文档和搜索“Swift嵌套类扩展”也没有得到答案。)

你知道这是否以及如何实现吗


更新:

多亏了用户3441734的试用,这段代码在单个文件中(或在游乐场中)可以正常工作


当这三个部分在不同的文件中时仍然不起作用,这可能是当前Swift编译器实现中的一个缺陷。我将向苹果提交一份bug报告。

这在我的操场上起作用,正如预期的那样

class A {
}
extension A {
    class B {
    }
}
extension A.B {
    func foo() {
        print("print from extension A.B")
    }
}
let ab = A.B()
ab.foo()    // print from extension A.B

这个问题似乎与我们的工作有关。我也遇到过类似的问题,我想编译器正在尝试处理文件,在文件中您先扩展嵌套类,然后再定义它。因此,您有这样一个错误,即A没有成员B

我找到的解决方案是转到您的目标设置,打开
构建阶段

编译源代码
部分中,您应该将定义嵌套类的文件放在扩展它的文件之上

更新
Xcode 10.2将随附,确实如此。我认为,这是当前在Xcode中实现Swift如何处理文件的一个缺陷。我将向苹果提交一份bug报告。谢谢谢谢你的回答!源代码的排序解决了这个问题,这一事实可能意味着编译器在解析符号时需要一定数量的过程,而这种情况超出了这个数量。我已经向苹果提交了一份bug报告,希望,他们将在未来版本的Xcode中对此做些什么。当通过命令行界面使用swift编译器时,有没有办法也解决这个问题?@cnotethegre8 Pods重新创建Xcode项目,并按字母顺序将它们添加到编译源代码列表中……谢谢。您使用的是哪个版本的Xcode/swift?嗨,Martin。要清楚,每个定义都在一个单独的文件中。在这种情况下,我刚刚用Swift 2.2在Xcode 7.3.1中重现了这个问题。如果你把所有的定义放在一个文件中(就像下面答案中的游乐场一样),一切都很好。换句话说,这不是Swift本身的问题,而是编译器的问题。
class A {
}
extension A {
    class B {
    }
}
extension A.B {
    func foo() {
        print("print from extension A.B")
    }
}
let ab = A.B()
ab.foo()    // print from extension A.B