Swift Language
Zugangskontrolle
Suche…
Syntax
- Privatunterricht Projekt
- let auto = Auto ("Ford", Modell: "Escape") // Standard intern
- public enum Genre
- private func berechnenMarketCap ()
- interne func setupView () überschreiben
- private (set) var-Bereich = 0
Bemerkungen
- Grundlegende Anmerkung:
Im Folgenden sind die drei Zugriffsebenen vom höchsten Zugriff (am wenigsten einschränkend) bis zum niedrigsten Zugriff (am stärksten einschränkend) aufgeführt.
Der öffentliche Zugriff ermöglicht den Zugriff auf Klassen, Strukturen, Variablen usw. von jeder Datei innerhalb des Modells, aber vor allem außerhalb des Moduls, wenn die externe Datei das Modul mit dem öffentlichen Zugriffscode importiert. Bei der Erstellung eines Frameworks wird häufig der öffentliche Zugriff verwendet.
Durch den internen Zugriff können Dateien nur mit dem Modul der Entitäten verwendet werden. Alle Entitäten verfügen standardmäßig über eine interne Zugriffsebene (mit einigen Ausnahmen).
Privater Zugriff verhindert, dass die Entität außerhalb dieser Datei verwendet wird.
- Bemerkung zur Unterklasse:
Eine Unterklasse kann keinen höheren Zugriff haben als ihre Oberklasse.
- Getter & Setter Bemerkung:
Wenn der Setter der Eigenschaft privat ist, ist der Getter intern (der Standardeinstellung). Außerdem können Sie dem Getter und dem Setter Zugriffsebene zuweisen. Diese Prinzipien gelten auch für Indizes
- Allgemeine Bemerkung:
Andere Entitätstypen umfassen: Initialisierer, Protokolle, Erweiterungen, Generics und Typ-Aliase
Einfaches Beispiel mit einer Struktur
In Swift 3 gibt es mehrere Zugriffsebenen. In diesem Beispiel werden alle bis auf open
:
public struct Car {
public let make: String
let model: String //Optional keyword: will automatically be "internal"
private let fullName: String
fileprivate var otherName: String
public init(_ make: String, model: String) {
self.make = make
self.model = model
self.fullName = "\(make)\(model)"
self.otherName = "\(model) - \(make)"
}
}
Nehmen myCar
an, myCar
wurde folgendermaßen initialisiert:
let myCar = Car("Apple", model: "iCar")
Car.make (öffentlich)
print(myCar.make)
Dieser Druck funktioniert überall, einschließlich Ziele, die Car
importieren.
Fahrzeugmodell (intern)
print(myCar.model)
Dies wird kompiliert, wenn der Code sich im selben Ziel befindet wie Car
.
Car.otherName (fileprivate)
print(myCar.otherName)
Dies funktioniert nur, wenn sich der Code in derselben Datei befindet wie Car
.
Car.fullName (privat)
print(myCar.fullName)
Dies funktioniert in Swift 3 nicht. Auf private
Eigenschaften kann nur innerhalb derselben struct
/ class
zugegriffen werden.
public struct Car {
public let make: String //public
let model: String //internal
private let fullName: String! //private
public init(_ make: String, model model: String) {
self.make = make
self.model = model
self.fullName = "\(make)\(model)"
}
}
Wenn der Entität mehrere Zugriffsebenen zugeordnet sind, sucht Swift nach der niedrigsten Zugriffsebene. Wenn eine private Variable in einer öffentlichen Klasse vorhanden ist, wird sie immer noch als privat betrachtet.
Beispiel für die Unterklasse
public class SuperClass {
private func secretMethod() {}
}
internal class SubClass: SuperClass {
override internal func secretMethod() {
super.secretMethod()
}
}
Beispiel für Getter und Setter
struct Square {
private(set) var area = 0
var side: Int = 0 {
didSet {
area = side*side
}
}
}
public struct Square {
public private(set) var area = 0
public var side: Int = 0 {
didSet {
area = side*side
}
}
public init() {}
}