Ответ
Swift предоставляет пять уровней доступа, от наиболее открытого к наиболее ограниченному:
1. open - Наиболее открытый доступ
open class NetworkManager {
open func fetchData() { /* ... */ }
}
// Можно: наследовать, переопределять, использовать из других модулей
2. public - Открытый доступ
public struct APIResponse {
public var data: Data
internal var metadata: Metadata // Недоступно извне
}
// Можно: использовать из других модулей
// Нельзя: наследовать/переопределять классы из других модулей
3. internal - Доступ по умолчанию
internal class DataProcessor {
func process() { /* ... */ } // По умолчанию internal
}
// Доступно только внутри модуля (framework или app)
4. fileprivate - Доступ в пределах файла
fileprivate class FileHelper {
static func readFile() { /* ... */ }
}
// Доступно только в этом .swift файле
5. private - Наиболее ограниченный доступ
class BankAccount {
private var balance: Decimal = 0
private func calculateInterest() { /* ... */ }
}
// Доступно только в пределах объявляющей области (класса, структуры)
Ключевые правила:
- Уровень доступа сущности не может быть более открытым, чем уровень доступа её типа
openприменим только к классам и членам классовprivate(set)позволяет публичное чтение, но приватную запись:public struct User { public private(set) var id: UUID // Чтение публично, запись приватно }
Области видимости в порядке убывания:
open > public > internal > fileprivate > private