访问控制(public/internal/fileprivate/private)
使用 public、internal(默认)、fileprivate 和 private 控制 API 在文件和模块中的可见性。了解何时应公开或隐藏内容。
访问控制(public/internal/fileprivate/private) 是 CoddyKit 上的免费 Swift Academy 课时。 这是第 3 节课,共 3 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Swift Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Swift Academy 课程共包含 3 节课。
访问级别概览
Swift 的访问级别:
- public:对其他模块可见
- internal(默认):在同一模块中可见
- fileprivate:仅限当前源文件
- private:限于包围它的作用域(类型或扩展)
internal(默认)
省略修饰符会使声明变为internal,可以在同一模块(软件包或应用目标)中的任意位置使用。
struct Greeter { // internal by default
func hello(_ name: String) -> String { "Hello, \\(name)" }
}
let g = Greeter()
print(g.hello("Ada"))public API 表面
将 API 标记为public,即可将其公开给其他模块;将辅助内容保留为 internal,以缩小 API 表面。
public struct Math {
public static func add(_ a: Int, _ b: Int) -> Int { a + b }
// internal helper remains hidden outside the module
static func double(_ x: Int) -> Int { x * 2 }
}
print(Math.add(1,2))fileprivate 作用域
fileprivate 会将使用范围限制在同一个源文件内。对于在单个文件中为某个类型拆分辅助内容的情况,这很有用。
// In FileA.swift
fileprivate func hiddenInFile() { print("Only in this file") }
struct A {
func call() { hiddenInFile() } // OK: same file
}
A().call()private 作用域
private 会将访问范围限制在包围它的作用域(类型或扩展)内。请使用它来严格保护不变量。
struct Box {
private var value = 0 // visible only inside Box declaration
mutating func set(_ v: Int) { value = v } // controlled write
func get() -> Int { value } // controlled read
}
var b = Box()
b.set(7)
print(b.get())
// b.value = 3 // error: 'value' is private设计提示
设计提示:
- 默认使用internal,只将使用者需要的内容公开为public。
- 辅助内容优先使用private/fileprivate,以保持 API 简洁。
- 成员的访问级别不能比其所属类型更宽泛。
默认访问级别
快速检查:默认的访问级别是什么?
回顾
回顾:使用public公开模块内容,让大多数内容保持internal,并使用fileprivate/private隐藏细节,从而保护不变量。
常见问题解答
「访问控制(public/internal/fileprivate/private)」课时是免费的吗?
是的 — 「访问控制(public/internal/fileprivate/private)」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Swift Academy 课程的其余内容,请升级到 CoddyKit PRO。 Swift Academy 课程共包含 3 节课。
「访问控制(public/internal/fileprivate/private)」这节课中我会学到什么?
使用 public、internal(默认)、fileprivate 和 private 控制 API 在文件和模块中的可见性。了解何时应公开或隐藏内容。 你通过在浏览器中直接运行的动手代码来练习 Swift Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Swift Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Swift Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 3 节。
「访问控制(public/internal/fileprivate/private)」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Swift Academy 课中编写并运行代码吗?
能。每节 Swift Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 成员初始化器与 mutating 方法
- 继承、重写与 final
- 访问控制(public/internal/fileprivate/private)