我有一个主类,也提供名称空间:
class A {
}
和通过扩展添加的嵌套类(所有这些都是为了使用单独的文件):
extension A {
class B {
}
}
我希望通过扩展它来为嵌套类(B)添加功能;我试过了:
extension A.B {
}
我得到"' B'不是' A'"
的会员类型(我还尝试了一些不太合理的事情,但我会在这里省略它们以避免尴尬。阅读Swift文档和谷歌搜索"快速嵌套类扩展"也没有得出答案。)
知道是否以及如何实现这一目标?
更新:
此代码在单个文件(或Playground)中按预期工作,这要归功于user3441734的尝试!
当3个部分位于单独的文件中时仍然不起作用,这可能是当前Swift编译器实现中的一个错误。我将向Apple提交一份错误报告。
答案 0 :(得分:92)
这个问题似乎与SR-631有关。我遇到过类似的问题,我想编译器正在尝试处理扩展嵌套类的文件,然后再定义嵌套类。因此,您有此错误说A没有成员B.
我找到的解决方案是转到目标设置,打开Build Phases
。
在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