Управление доступом (public/internal/fileprivate/private)
Управляйте видимостью API в разных файлах и модулях с помощью public, internal (по умолчанию), fileprivate и private. Узнайте, когда API следует открывать, а когда скрывать.
«Управление доступом (public/internal/fileprivate/private)» — бесплатный урок Swift Academy на CoddyKit. Это урок 3 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 3 уроков всего.
Обзор уровней доступа
Уровни доступа в Swift:
- открытый: виден другим модулям
- внутренний (по умолчанию): виден в том же модуле
- доступ на уровне файла: доступен только в этом исходном файле
- закрытый: доступен во внешней области (типе или расширении)
Внутренний доступ по умолчанию
Если не указывать модификатор, объявления получают внутренний уровень доступа и доступны в пределах того же модуля (пакета или цели приложения).
struct Greeter { // internal by default
func hello(_ name: String) -> String { "Hello, \\(name)" }
}
let g = Greeter()
print(g.hello("Ada"))Открытая поверхность программного интерфейса
Помечайте программные интерфейсы как открытые, чтобы сделать их доступными другим модулям; вспомогательные элементы оставляйте внутренними, чтобы поверхность интерфейса оставалась небольшой.
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))Область доступа файла
Доступ на уровне исходного файла ограничивает использование тем же исходным файлом. Это удобно для разделения вспомогательных элементов типа внутри одного файла.
// In FileA.swift
fileprivate func hiddenInFile() { print("Only in this file") }
struct A {
func call() { hiddenInFile() } // OK: same file
}
A().call()Закрытая область доступа
Закрытый уровень ограничивает доступ внешней областью (типом или расширением). Используйте его, чтобы надёжно защищать инварианты.
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Советы по проектированию
Советы по проектированию:
- По умолчанию выбирайте внутренний уровень, а как открытые предоставляйте только необходимые пользователям элементы.
- Для вспомогательных элементов предпочитайте закрытый доступ или доступ на уровне исходного файла, чтобы интерфейсы оставались небольшими.
- Уровень доступа члена не может быть шире уровня доступа его типа.
Доступ по умолчанию
Быстрая проверка: какой уровень доступа используется по умолчанию?
Итоги
Итоги: используйте открытый доступ, чтобы предоставлять элементы модуля, большинство элементов оставляйте внутренними, а детали скрывайте с помощью доступа на уровне исходного файла или закрытого доступа, защищая инварианты.
Изучай Swift с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 122
- Уроки
- 409
Часто задаваемые вопросы
Урок «Управление доступом (public/internal/fileprivate/private)» бесплатный?
Да — полный текст урока «Управление доступом (public/internal/fileprivate/private)» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 3 уроков всего.
Чему я научусь в уроке «Управление доступом (public/internal/fileprivate/private)»?
Управляйте видимостью API в разных файлах и модулях с помощью public, internal (по умолчанию), fileprivate и private. Узнайте, когда API следует открывать, а когда скрывать. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Swift Academy?
Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 3.
Сколько времени занимает урок «Управление доступом (public/internal/fileprivate/private)»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Swift Academy?
Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Memberwise init и изменяющие методы
- Наследование, переопределение и final
- Управление доступом (public/internal/fileprivate/private)