Чем отличаются модификаторы доступа fileprivate и private в языке Swift?

В Swift модификаторы доступа private и fileprivate ограничивают видимость кода, но отличаются областью действия:

Короткий ответ

Что ответить на собеседовании

В Swift модификаторы доступа private и fileprivate ограничивают видимость кода, но отличаются областью действия:

Подробный разбор

Ответ с пояснениями

В Swift модификаторы доступа private и fileprivate ограничивают видимость кода, но отличаются областью действия:

  • private ограничивает доступ к элементу только внутри того же объявления (например, класса, структуры или расширения). Даже в том же файле, но вне этого объявления, доступ запрещён.
  • fileprivate разрешает доступ ко всему элементу в пределах одного файла. То есть все типы и функции в одном файле могут видеть fileprivate элементы.

Пример:

class MyClass {
    private var privateValue = 1
    fileprivate var fileprivateValue = 2
}

extension MyClass {
    func test() {
        print(privateValue)       // Доступно, так как в том же объявлении
        print(fileprivateValue)   // Доступно
    }
}

func outside() {
    let obj = MyClass()
    // print(obj.privateValue)    // Ошибка: private вне класса
    print(obj.fileprivateValue)  // Доступно, так как в том же файле
}

Таким образом, private — самый строгий уровень, ограниченный объявлением, а fileprivate расширяет доступность на весь файл.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее