2017-01-19 3 views
5

Swift предлагает 5 модификаторов доступа: open, public, internal, fileprivate и private.В Swift, в чем разница между модификаторами доступа внутри и снаружи?

Из того, что я знаю об этих спецификаторов (в основном из linklink_2 &)

open означает классы и члены класса могут быть подклассы и переопределяется как внутри, так и вне определяющего модуля (цели).

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

private ограничивает использование сущности своей заявочной декларацией.

Теперь, общественный и внутренний кажется довольно много мне то же самое: -

public означает классы и члены класса могут быть подклассы и переопределить в определяющем модуле (цель) только.

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

В целом, как публичные и внутренние отличаются?

Это мой первый вопрос здесь, поэтому, если я пропустил какие-либо подробности, пожалуйста, дайте мне знать. Заранее спасибо.

+5

'public' видны вне определяющего модуля,' internal' не являются – user28434

+0

@ user28434 Я считаю, что 'public 'отображается только внутри определяющего модуля. – iCode

+0

@ user28434, вы можете обратиться к ссылкам, указанным для подтверждения. – iCode

ответ

1

От Access Control manual:

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

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

Разница в видимости для других модулей.

EDIT ответить @iCode комментарий:

Вам не нужно их все.

Для простейшего небольшого однопользовательского приложения достаточно использовать только internal.

Если вам нужно будет сделать это правильно, вы можете добавить fileprivate/private аксессуаров, чтобы скрыть некоторые реализации.

Если вы разрабатываете большое приложение и хотите разделить код на модули, или если вы разрабатываете библиотеку, вам нужно будет использовать public/open для создания межмодульного интерфейса.

+0

Только что получили данные из предоставленной ссылки @ user28434. 'public' ** доступно ** (примечание только ** доступно **, нет опции для ** подкласса/переопределения **) вне определяющего модуля. 'open' однако предлагает как доступность, так и возможность преодоления даже вне его модуля. Наконец, 'internal' даже не доступен вне его собственного модуля. Однако мне интересно, будем ли мы использовать столько разных типов в одном проекте! – iCode

2

Независимо от того, что вы отметили как общественность может использоваться в вашем приложении и вне вашего приложения (модуля). Если вы отметили что-то как внутреннее, которое может использоваться только в вашем приложении (модуле). Это очень полезно, когда вы разрабатываете библиотеку (фреймворк), вы можете использовать внутреннюю, чтобы скрыть библиотечную структуру.
И общественные члены A.swift и B.swift доступны C.swift и D.swift. Единственное ограничение состоит в том, что классы не могут быть подклассами (они должны быть open.) - Моя база ответов на @Keaz & @Alexander.

Смежные вопросы