Swift: Kapselung und Zugriffskontrolle

Swift unterscheidet folgende Sichtbarkeiten:

  • Standardmäßig gilt internal, das die Verwendung in allen Quelldateien des deklarierenden Moduls erlaubt.

  • private schränkt die Sichtbarkeit auf den deklarierenden Typ ein (erbende Klassen dürfen z.B. nicht zugreifen):

    class Counter {
        // Nur diese Instanz von Counter darf auf value zugreifen
        private var value = 0
    
        func addValue(inc: Int) {
            value += inc
        }
    }
    
  • fileprivate schränkt die Sichtbarkeit auf die deklarierende Quelltextdatei ein.

  • Ein Sprachkonstrukt protected, mit dem erbenden Klassen der Zugriff gestattet werden kann, existiert in Swift nicht.

  • Mit public können Deklarationen über die Grenzen des Moduls sichtbar gemacht werden. Damit werden vor allem bei der Entwicklung von Frameworks öffentliche Schnittstellen für andere Module zugänglich gemacht.

  • Wird eine Klasse als public deklariert, darf von dieser standardmäßig nur innerhalb des eigenen Moduls geerbt werden. Mit open darf die Klasse auch außerhalb des deklarierenden Moduls als Superklasse verwendet werden.

Für Eigenschaften besteht die Möglichkeit, lediglich die Sichtbarkeit des Setters einzuschränken. So kann eine Eigenschaft deklariert werden, die nur gelesen, aber nicht verändert werden kann:

class Counter {
    private(set) var value = 0
}

Weitere Informationen