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

  1. 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.

  1. Bemerkung zur Unterklasse:

Eine Unterklasse kann keinen höheren Zugriff haben als ihre Oberklasse.

  1. 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

  1. Allgemeine Bemerkung:

Andere Entitätstypen umfassen: Initialisierer, Protokolle, Erweiterungen, Generics und Typ-Aliase

Einfaches Beispiel mit einer Struktur

3,0

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() {}
}


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow