无法在独立文件中扩展Parent的嵌套结构体Child求助
解决在独立文件中为Child编写扩展的问题
当然可以在独立文件里给Child编写扩展!你遇到的报错根本不是文件分离导致的,而是类型引用方式或者访问权限的小问题,咱们一步步理清楚:
1. 先排查扩展的写法是否错误
你收到的报错'Child' is not a member type of 'Parent',大概率是因为你在扩展里错误地把Child当成了Parent的嵌套类型来引用了。举个例子:
错误写法:
extension Parent.Child { // 你的扩展代码 }
如果你的Child是独立的顶级结构体(也就是它没有嵌套在Parent内部,只是可能最初和Parent写在同一个文件里),那正确的扩展写法应该直接针对Child本身:
extension Child { // 你的扩展逻辑 }
要是Child确实是Parent的嵌套类型(即定义在Parent结构体内部),那你不能把Child单独放到Child.swift里——Swift要求嵌套类型必须定义在外围类型的大括号范围内,这种情况下你之前能正常使用Child反而有点奇怪,大概率是你已经把Child改成了顶级类型,但扩展代码没同步更新。
2. 检查访问权限设置
如果写法没问题,那就要看Child的访问权限:
- 如果
Child的定义是默认的internal(也就是没写访问修饰符),那同一个模块下的Child+Extension.swift完全可以访问它,没问题。 - 如果
Child被标记为private,那它只能在定义它的文件内被访问,这种情况下你需要把它改成internal或者fileprivate(如果只需要当前模块访问的话),或者public(如果要跨模块扩展)。
总结
文件分离的方式完全支持给Child写扩展,你只需要调整扩展的引用方式,或者确认Child的访问权限符合要求就行——合并文件能正常运行,只是因为在同一个文件里编译器能正确识别类型,本质上和文件分离的逻辑是一致的。
内容的提问来源于stack exchange,提问作者anders
相关产品推荐
相关产品推荐

