Swift Package类为什么需要public修饰符?有无无需public的使用方式?
问题解答
1. Swift Package 类与普通项目类的区别、public修饰符必要性
Swift 遵循严格的模块级访问控制规则,默认的访问修饰符是internal:
- 普通单项目开发时,整个App本身就是一个独立模块,所有没加访问修饰符的类默认都是
internal权限,可在整个App模块内随意调用,所以不需要额外加修饰符就能用。 - Swift Package 本身是独立于主项目的单独模块,默认的
internal权限仅允许类在当前Package模块内部访问,跨模块(也就是主项目引入Package的场景)就会触发权限报错。因此必须给需要对外暴露的类、属性、方法添加public(如果需要允许其他模块继承该类还要用open)修饰符,才能被主项目正常访问。
2. 不添加public修饰符使用包内类的可行方案
只有两种符合官方规范的场景可以不用加public:
- 放弃Swift Package的独立组件形式,直接把包内的源文件拖入主项目的编译源列表中,此时这些代码和主项目属于同一个模块,默认
internal权限即可正常调用。 - 仅在Swift Package内部的其他目标(比如包自带的测试目标、同包下的其他子模块)调用该类,不需要跨到外部主项目访问。
如果你的使用场景就是要把代码作为独立Swift Package给外部主项目依赖,没有官方支持的方案可以跳过public修饰符,非官方的私有API标注不推荐在生产环境使用。
内容的提问来源于stack exchange,提问作者poPaTheGuru
相关产品推荐
相关产品推荐

