В чем разница между private и fileprivate в Swift 4

в Swift 4, так как теперь private отображается в расширениях также в том же файле исходного кода, как он отличается от fileprivate модификатор доступа?

Справочная информация: в Swift 3 частные переменные класса не отображаются в его расширениях в одном файле. За это,fileprivate пришлось использовать.

3 ответов


Файл Private
File-private access ограничивает использование сущности собственным исходным файлом определения. Используйте файл-Частный доступ, чтобы скрыть детали реализации определенной части функциональности, когда эти детали используются во всем файле.
синтаксис: fileprivate <var type> <variable name>
пример: fileprivate class SomeFilePrivateClass {}


частная
Частный доступ ограничивает использование сущности заключением объявление, и к расширениям того объявление, которые находятся в том же файле. Используйте Частный доступ, чтобы скрыть детали реализации определенной части функциональности, когда эти детали используются только в одном объявлении.
синтаксис: private <var type> <variable name>
пример: private class SomePrivateClass {}


вот более подробно обо всех уровнях доступа:Уровни Быстрого Доступа

ответ на ваш вопрос: (в Swift 3 частные переменные класса не отображаются в его расширениях в одном файле. Для этого нужно было использовать fileprivate.)

да, в Swift 4.0 Private теперь доступен в расширении, но в том же файле. Если вы объявите / определите расширение в другом файле, то ваша частная переменная не будет доступна вашему расширению


смотреть на это изображения:
: ViewController.быстрый
здесь расширение и контроллер просмотра находятся в одном файле, следовательно, частная переменная testPrivateAccessLevel доступен в расширении

enter image description here


: вопросами и ответами.быстрый
здесь расширение и контроллер просмотра находятся в разных файлах, следовательно, частная переменная testPrivateAccessLevel не работает в расширение.

enter image description here

enter image description here


здесь класс ViewController2 является наследником ViewController и оба находятся в одном файле. Здесь частная переменная testPrivateAccessLevel недоступен в подклассе, но fileprivate доступен в подклассе.

enter image description here


" Private "доступен только в классе," FilePrivate " доступен только в .файл swift.


применимо в swift 4.0 и его версиях
частная
Частный доступ только в классе и его расширение (когда расширение находится в том же самом .swift file).

File Private
Файл-Частный доступ только в классе и его расширение и подкласс (когда расширение или подкласс находятся в одном и том же .swift file).