Sobes.tech
Назад к вопросам
Junior — Middle
76

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

Компании, где спрашивали
AppMaster

Ответ от нейросети

sobes.tech AI

В 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 расширяет доступность на весь файл.