You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 18:09:02