Gemäß der offiziellen Swift-Dokumentation

„Die Zugriffskontrolle beschränkt den Zugriff auf Teile Ihres Codes von Code in anderen Quelldateien und Modulen. Mit dieser Funktion können Sie die Implementierungsdetails Ihres Codes ausblenden und eine bevorzugte Schnittstelle angeben, über die auf diesen Code zugegriffen und dieser verwendet werden kann.“

Swift 5 verfügt über fünf Zugriffskontrollen. Sie sind offen, öffentlich, intern, dateiprivat und privat. Diese Zugriffskontrollen werden basierend auf den Verwendungen im Modul und in der Quelldatei definiert. In diesem Tutorial erfahren Sie, was, wo und wie Sie die Zugriffskontrolle in Swift verwenden.

open (weniger restriktiv)

Alles, was mit open definiert ist, kann innerhalb oder außerhalb des Moduls aufgerufen werden. auf Entitäten auf Open-Access-Ebene kann von überall aus zugegriffen werden. Das bedeutet, dass eine offene Variable zugreifen kann, eine offene Funktion überschreiben kann und eine offene Klasse innerhalb eines Moduls und außerhalb eines Moduls eine Unterklasse sein kann, indem dieses Modul importiert wird.

Ein Beispiel ist die Klasse „UITableViewCell“ im UIKit-Framework. Wir können jede Klasse als UITableViewCell-Klasse unterklassen, indem wir das UIKit-Modul importieren. Wenn Sie die Definition von „UITableViewCell“ sehen, sehen Sie Open Access Control vor der Klassendefinition im UIKit-Modul. Aus diesem Grund können wir jede Klasse als UITableViewCell-Klasse unterteilen, indem wir UIKit importieren.

@available(iOS 2.0, *)open class UITableViewCell : UIView, NSCoding, UIGestureRecognizerDelegate { }

public (restrictive than open)

Wie Open Access kann auch auf öffentliche Einrichtungen innerhalb oder außerhalb eines Moduls zugegriffen werden. Es gibt jedoch einen großen Unterschied zwischen offen und öffentlich.

Die öffentliche Klasse kann nicht in Unterklassen unterteilt und die öffentliche Methode außerhalb des definierten Moduls nicht überschrieben werden. Muss innerhalb des Moduls, in dem sie definiert sind, Unterklassen oder überschreiben.

Überprüfen Sie das folgende Beispiel

//module 1open class X{}
open func bar(){}public class Y{}
public func foo(){}//module 2class A: X{} // success
override func bar(){} // successclass B: Y{} //error
override func foo(){} // error

intern (Zugriffskontrolle auf Modulebene)

„internal“ ermöglicht die Verwendung von Entitäten an einer beliebigen Stelle innerhalb des definierten Moduls. „intern“ ist die Standardzugriffsebene. Normalerweise ist ein Modul ein Framework oder eine App, die als einzelne Einheit verwendet werden kann.

Innerhalb eines Ziels (Moduls) sind alle Entitäten standardmäßig intern (wenn explizit keine Zugriffskontrolle definiert wurde). Es ist so definiert, dass jeder von überall innerhalb dieses Moduls auf alles innerhalb des Moduls zugreifen kann.

fileprivate( Zugriffskontrolle auf Dateiebene)

Auf Fileprivate-Entitäten kann nur innerhalb einer Swift-Datei zugegriffen werden. Eine Swift-Datei kann mehrere Klassen oder Strukturen haben. Auf alle privaten Dateientitäten in einer Swift-Datei kann von allen Klassen oder Strukturen in dieser Datei zugegriffen werden. Ohne sie können andere Klassen außerhalb dieser Datei nicht darauf zugreifen. Es verbirgt im Allgemeinen die Implementierung vor anderen Quelldateien des Moduls.

//** ViewController.swift **//class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad() let a = A()
a.x()
a.z() //error let b = B()
b.Y() // error
}
}class A {fileprivate func x(){
print("Inside ViewController file")
}
}
//** SecondViewController.swift **//class B{fileprivate func Y(){
print("Outside ViewController file")
}
}extension A{
fileprivate func Z(){
print("Outside ViewController file, extension of A")
}
}

privat( Zugriffskontrolle auf Klassenebene)

privat ist die am häufigsten verwendete und am stärksten eingeschränkte Zugriffskontrolle. Die privaten Entitäten können nur innerhalb der von ihnen deklarierten Klasse (einschließlich Erweiterung) darauf zugreifen. Es wird im Allgemeinen verwendet, um die interne Implementierung oder Funktionalität außerhalb einer bestimmten Klasse zu verbergen.

// ** ViewController.swift **//class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
x()
let a = A()
a.Y() // error
}
}extension ViewController{
private func x(){
print("Inside x")
}
}class A {
private func Y(){
print("Inside Y")
}
}

Unterschied zwischen Swift Access Control

Jetzt werden wir den Unterschied zwischen diesen Zugriffsmodifikatoren basierend auf verschiedenen Parametern als tabellarische Form sehen

Glückwunsch 🎉 🎉 🎉 Ich denke, jetzt haben Sie eine Vorstellung von der Zugriffskontrolle in der Programmiersprache Swift. Eine kurze Besprechung finden Sie in der offiziellen Swift-Dokumentation.

Wenn Sie diesen Artikel nützlich fanden, teilen Sie ihn bitte und klatschen Sie 👏👏👏
Überprüfen Sie meine anderen Artikel auf Medium und verbinden Sie mich auf LinkedIn.

Danke fürs Lesen & Happy coding 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.