Swift 3: разница между модификаторами открытого и внутреннего доступа?

Я прочитал справку Apple о модификаторах доступа в Swift 3. Я прочитал также о том же самом в стеке, но я не получил ответа, как тот, кто спросил. Как я правильно понял, есть четыре уровня:

  1. Открытый, Общественный
  2. внутренний
  3. Fileprivate
  4. Частный

Я создал схемы для себя, чтобы понять разницу между всеми этими модификаторами и загружен здесь. Как видите, между модификаторами Public и Internal нет различий. Однако они находятся на разных уровнях. Любая идея будет оценена!

3 ответа

Решение

Ваша диаграмма просто неверна.

Публичные члены A.swift а также B.swift доступны для C.swift а также D.swift, Единственное ограничение заключается в том, что классы не могут быть разделены на подклассы (они должны быть open,

  • Внутренний - это спецификатор доступа по умолчанию в swift. Благодаря этому мы можем получить доступ к данным-членам и функциям-членам в одном модуле (цели).

  • Общедоступный - здесь вы можете получить доступ ко всем элементам данных и функциям-членам внутри одного модуля и вне его. Но вы не можете создать подкласс или переопределить вне модуля.

  • Открыто - то же, что и общедоступное, с той лишь разницей, что вы можете создавать подкласс или переопределять вне модуля

  • Fileprivate - Как следует из названия, члены-данные и функции-члены доступны в одном файле.

  • Приватный - это то место, где вы можете иметь доступ в рамках тела функции или класса.

Все, что вы пометили как общедоступное, можно использовать как внутри приложения, так и за его пределами (модуля). Если вы пометили что-то как внутреннее, это можно использовать только в вашем приложении (модуле). Это очень полезно при разработке библиотеки (фреймворка), вы можете использовать внутреннюю, чтобы скрыть структуру библиотеки.

В книге Swift Programming Language от Apple четко объясняются следующие модификаторы доступа:

"Swift предоставляет пять различных уровней доступа для сущностей в вашем коде. Эти уровни доступа относятся к исходному файлу, в котором определена сущность, а также к модулю, к которому принадлежит исходный файл.

Открытый доступ и открытый доступ позволяют использовать сущности в любом исходном файле из их определяющего модуля, а также в исходном файле из другого модуля, который импортирует определяющий модуль. Обычно вы используете открытый или публичный доступ при указании открытого интерфейса к платформе. Разница между открытым и публичным доступом описана ниже.

Внутренний доступ позволяет использовать сущности в любом исходном файле из их определяющего модуля, но не в любом исходном файле за пределами этого модуля. Обычно вы используете внутренний доступ при определении внутренней структуры приложения или фреймворка.

Частный доступ к файлу ограничивает использование объекта собственным определяющим исходным файлом. Используйте частный доступ к файлу, чтобы скрыть детали реализации определенной части функциональности, когда эти детали используются внутри всего файла.

Частный доступ ограничивает использование объекта прилагаемой декларацией. Используйте частный доступ, чтобы скрыть детали реализации определенной части функциональности, когда эти детали используются только в пределах одной декларации

Выдержка из: Apple Inc. "Язык программирования Swift (Swift 3.1)". IBooks. https://itun.es/gb/jEUH0.l "

Зависит от модификатора доступа класса, функции или свойства, он может быть подклассом, отменен, доступен

Модификатор доступа может применяться для class, field [О],method. Попробуйте получить доступ, подклассифицировать или переопределить это.

  • Доступ к field или method проходит через class
  • Наследование. Преемникclass(подкласс) модификатор доступа должен быть таким же или ограничивать его (кромеprivate <-> fileprivate). Преемникmethod(переопределить) модификатор доступа должен быть таким же или расширить его

[Модификаторы доступа Java]

•   Public - Can be used from any module but can’t be subclassed outside defining module (target).

•   Internal - This is default access modifier in swift. Can be accessible from the defining module (target) only.

•   Open - Can be used from any module and can be subclassed outside defining module (target).

•   Swift 4+

•   Fileprivate - Fileprivate members and functions are accessible within the same file, within the extension in same file, and extension in other file also.


•   Private - Private members and functions are accessible within the same file, within the extension in same file.
Другие вопросы по тегам