web-dev-qa-db-de.com

Swift 3: Der Unterschied zwischen öffentlichen und internen Zugriffsmodifikatoren?

Ich habe die Apple-Referenz über Zugriffsmodifikatoren in Swift 3 gelesen. Ich habe auch über Stackoverflow gelesen, aber ich habe keine Antwort als die Person erhalten, die gefragt hat. Wie ich richtig verstanden habe, gibt es vier Ebenen:

  1. Offen, öffentlich
  2. Intern
  3. Dateiprivat
  4. Privatgelände

Ich habe die Schemata für mich erstellt, um einen Unterschied zwischen all diesen Modifikatoren zu verstehen, und habe hier hochgeladen. Wie Sie sehen, gibt es keine Unterschiede zwischen den Modifizierern "Öffentlich" und "Intern". Sie befinden sich jedoch auf verschiedenen Ebenen. Jede Idee wäre dankbar!

7
shokuroff

Ihr Diagramm ist nur falsch.

Öffentliche Mitglieder von A.Swift und B.Swift stehen für C.Swift und D.Swift zur Verfügung. Die einzige Einschränkung ist, dass Klassen nicht untergeordnet werden können (sie müssten open sein.

2
Alexander

Das Buch The Swift Programming Language von Apple erläutert diese Zugriffsmodifizierer eindeutig: 

„Swift bietet fünf verschiedene Zugriffsebenen für Entitäten in Ihrem Code. Diese Zugriffsebenen beziehen sich auf die Quelldatei, in der eine Entität definiert ist, und auch relativ auf das Modul, zu dem die Quelldatei gehört.

Open access und public access ermöglichen die Verwendung von Entitäten in jeder Quelldatei ihres Definitionsmoduls und auch in einer Quelldatei eines anderen Moduls, das das Definitionsmodul importiert. In der Regel verwenden Sie offenen oder öffentlichen Zugriff, wenn Sie die öffentliche Schnittstelle für ein Framework angeben. Der Unterschied zwischen offenem und öffentlichem Zugang wird unten beschrieben.

Interner Zugriff ermöglicht die Verwendung von Entitäten in einer beliebigen Quelldatei ihres Definitionsmoduls, nicht jedoch in einer Quelldatei außerhalb dieses Moduls. Sie verwenden normalerweise den internen Zugriff, wenn Sie die interne Struktur einer App oder eines Frameworks definieren.

File-private access beschränkt die Verwendung einer Entität auf ihre eigene definierende Quelldatei. Verwenden Sie den privaten Zugriff auf Dateien, um die Implementierungsdetails eines bestimmten Funktionselements zu verbergen, wenn diese Details in einer gesamten Datei verwendet werden.

Private access beschränkt die Verwendung einer Entität auf die einschließende Deklaration. Verwenden Sie den privaten Zugriff, um die Implementierungsdetails einer bestimmten Funktion zu verbergen, wenn diese Details nur in einer einzelnen Deklaration verwendet werden

Auszug aus: Apple Inc. „Die schnelle Programmiersprache (Swift 3.1).“ IBooks. https://itun.es/gb/jEUH0.l

6
rennarda

Was Sie als public markiert haben, kann in Ihrer App und außerhalb Ihrer App (Modul) verwendet werden. Wenn Sie etwas als internal markiert haben, das nur in Ihrer App (Modul) verwendet werden kann . Dies ist sehr hilfreich, wenn Sie eine Bibliothek (Framework) entwickeln. Sie können internal verwenden, um die Bibliotheksstruktur auszublenden.

6
Keaz
  • Internal - Dies ist der Standardzugriffsspezifizierer in Swift. Damit können wir Auf Datenmitglieder und Elementfunktionen im selben Modul (Ziel) zugreifen. 

  • Public - Hier können Sie auf alle Datenelement- und Memberfunktionen Innerhalb und außerhalb des Moduls zugreifen. Sie können jedoch keine Unterklasse oder Außerkraftsetzung außerhalb des Moduls haben.

  • Open - Wie bei public, der einzige Unterschied besteht darin, dass Sie eine Unterklasse oder Außerhalb des Moduls überschreiben können.

  • Fileprivate - Wie der Name schon sagt, sind Datenmitglieder und Elementfunktionen Innerhalb derselben Datei zugänglich.

  • Private - Hier können Sie innerhalb des Funktionskörpers oder der Klasse Zugriff haben.

5
rahul katore