在Swift

时间:2016-02-27 17:53:56

标签: swift2

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

class A {
}

和通过扩展添加的嵌套类(所有这些都是为了使用单独的文件):

extension A {
  class B {
  }
}

我希望通过扩展它来为嵌套类(B)添加功能;我试过了:

extension A.B {
}

我得到"' B'不是' A'"

的会员类型

(我还尝试了一些不太合理的事情,但我会在这里省略它们以避免尴尬。阅读Swift文档和谷歌搜索"快速嵌套类扩展"也没有得出答案。)

知道是否以及如何实现这一目标?

更新:

此代码在单个文件(或Playground)中按预期工作,这要归功于user3441734的尝试!

当3个部分位于单独的文件中时仍然不起作用,这可能是当前Swift编译器实现中的一个错误。我将向Apple提交一份错误报告。

2 个答案:

答案 0 :(得分:92)

这个问题似乎与SR-631有关。我遇到过类似的问题,我想编译器正在尝试处理扩展嵌套类的文件,然后再定义嵌套类。因此,您有此错误说A没有成员B.

我找到的解决方案是转到目标设置,打开Build Phases

enter image description here

Compile Sources部分中,您应该将用于定义嵌套类的文件放在扩展它的文件上。

更新

fix将附带Xcode 10.2

答案 1 :(得分:3)

这可以在我的操场上运行,如预期的那样

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