Swift Language
Controllo di accesso
Ricerca…
Sintassi
- Progetto di classe privata
- let car = Car ("Ford", modello: "Escape") // default interno
- public enum Genere
- func privato calculateMarketCap ()
- sovrascrivi func interna setupView ()
- private (set) var area = 0
Osservazioni
- Nota di base:
Di seguito sono riportati i tre livelli di accesso dall'accesso più alto (meno restrittivo) all'accesso più basso (più restrittivo)
L' accesso pubblico consente l'accesso a classi, strutture, variabili, ecc. Da qualsiasi file all'interno del modello, ma soprattutto dal modulo se il file esterno importa il modulo contenente il codice di accesso pubblico. È popolare utilizzare l'accesso pubblico quando si crea un framework.
L' accesso interno consente ai file solo con il modulo delle entità di utilizzare le entità. Tutte le entità hanno un livello di accesso interno per impostazione predefinita (con alcune eccezioni).
L' accesso privato impedisce l'utilizzo dell'entità al di fuori di quel file.
- Nota sottoclasse:
Una sottoclasse non può avere un accesso superiore rispetto alla sua superclasse.
- Getter & Setter Nota:
Se il setter della proprietà è privato, il getter è interno (che è il valore predefinito). Inoltre è possibile assegnare il livello di accesso sia per il getter che per il setter. Questi principi si applicano anche agli abbonati
- Nota generale:
Altri tipi di entità includono: inizializzatori, protocolli, estensioni, generici e alias di tipo
Esempio di base usando una Struct
In Swift 3 ci sono più livelli di accesso. Questo esempio li utilizza tutti tranne che per 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)"
}
}
Supponi che myCar
stato inizializzato in questo modo:
let myCar = Car("Apple", model: "iCar")
Car.make (pubblico)
print(myCar.make)
Questa stampa funzionerà ovunque, compresi gli obiettivi che importano l' Car
.
Car.model (interno)
print(myCar.model)
Questo verrà compilato se il codice si trova nello stesso obiettivo di Car
.
Car.otherName (file privato)
print(myCar.otherName)
Funzionerà solo se il codice è nello stesso file di Car
.
Car.fullName (privato)
print(myCar.fullName)
Questo non funzionerà con Swift 3. È possibile accedere private
proprietà private
solo all'interno della stessa struct
/ class
.
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)"
}
}
Se l'entità ha più livelli di accesso associati, Swift cerca il livello di accesso più basso. Se esiste una variabile privata in una classe pubblica, la variabile verrà comunque considerata privata.
Esempio di sottoclasse
public class SuperClass {
private func secretMethod() {}
}
internal class SubClass: SuperClass {
override internal func secretMethod() {
super.secretMethod()
}
}
Esempio di getter e 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() {}
}