swift2 Swift中嵌套类型的扩展

pwuypxnk  于 2022-11-06  发布在  Swift
关注(0)|答案(2)|浏览(282)

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

class A {
}

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

extension A {
  class B {
  }
}

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

extension A.B {
}

我得到“B”不是A的成员类型“。
(我也尝试过一些不太合理的东西,但为了避免尴尬,我在这里省略了它们。阅读Swift文档和在谷歌上搜索“swift嵌套类扩展”也没有得到答案。)
你知道这是否可以实现以及如何实现吗?
最新消息:
这段代码在单个文件中(或在Playground中)可以正常工作,感谢user 3441734的试用!
当3个部分在单独的文件中时仍然不起作用,可能是Swift编译器当前实现中的一个bug。我将向苹果提交一个bug报告。

idv4meu8

idv4meu81#

看起来这个问题和SR-631有关。我也遇到过类似的问题,我猜编译器试图在定义嵌套类的文件之前处理扩展嵌套类的文件。因此,你会有这样的错误,说A没有成员B。
我找到的解决方案是转到您的目标设置,打开Build Phases

Compile Sources节中,您应该将定义嵌套类的文件放在扩展嵌套类的文件上方。

更新

fix将与Xcode 10.2一起发货

h6my8fg2

h6my8fg22#

这在我的操场上很管用,正如所料

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

相关问题