在Swift中扩展嵌套类型

Bag*_*lan 42 swift2

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

class A {
}
Run Code Online (Sandbox Code Playgroud)

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

extension A {
  class B {
  }
}
Run Code Online (Sandbox Code Playgroud)

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

extension A.B {
}
Run Code Online (Sandbox Code Playgroud)

我得到"'B'不是'A'的成员类型".

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

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


更新:

感谢user3441734试用它时,此代码在单个文件(或Playground)中按预期工作!

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

Nik*_*kin 92

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

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

在此输入图像描述

在那里,Compile Sources你应该在你扩展它的文件上面放置你定义嵌套类的文件.

更新

补丁将在Xcode 10.2出货

  • 谢谢你的回答!源的排序解决问题的事实可能意味着编译器在解析符号时需要一定数量的传递,并且这种情况超出了这个数量.我已经向Apple提交了一份错误报告,希望他们能在未来的Xcode版本中做些什么. (11认同)