Swift Language
Toegangscontrole
Zoeken…
Syntaxis
- privéklasse project
- let car = Car ("Ford", model: "Escape") // standaard intern
- publiek genre
- private func calculMarketCap ()
- interne func-instellingen negeren View ()
- private (set) var area = 0
Opmerkingen
- Basic Opmerking:
Hieronder staan de drie toegangsniveaus van hoogste toegang (minst beperkend) tot laagste toegang (meest beperkend)
Openbare toegang geeft toegang tot klassen, structuren, variabelen, enz. Vanuit elk bestand binnen het model, maar nog belangrijker buiten de module als het externe bestand de module met de openbare toegangscode importeert. Het is populair om openbare toegang te gebruiken wanneer u een framework maakt.
Interne toegang staat bestanden alleen toe met de module van de entiteiten om de entiteiten te gebruiken. Alle entiteiten hebben standaard een intern toegangsniveau (met enkele uitzonderingen).
Privétoegang voorkomt dat de entiteit buiten dat bestand wordt gebruikt.
- Subklasse Opmerking:
Een subklasse kan geen hogere toegang hebben dan zijn superklasse.
- Getter & Setter Opmerking:
Als de setter van de eigenschap privé is, is de getter intern (wat de standaardinstelling is). U kunt ook een toegangsniveau toewijzen voor zowel de getter als de setter. Deze principes zijn ook van toepassing op subscripts
- Algemene opmerking:
Andere typen entiteiten zijn: initialisatie, protocollen, extensies, generieken en type-aliassen
Basisvoorbeeld met een Struct
In Swift 3 zijn er meerdere toegangsniveaus. Dit voorbeeld gebruikt ze allemaal behalve 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)"
}
}
Stel dat myCar
als myCar
is geïnitialiseerd:
let myCar = Car("Apple", model: "iCar")
Car.make (openbaar)
print(myCar.make)
Deze afdruk werkt overal, inclusief doelen die Car
importeren.
Car.model (intern)
print(myCar.model)
Dit wordt gecompileerd als de code hetzelfde doel heeft als Car
.
Car.otherName (fileprivate)
print(myCar.otherName)
Dit werkt alleen als de code in hetzelfde bestand staat als Car
.
Car.fullName (privé)
print(myCar.fullName)
Dit werkt niet in Swift 3. private
eigendommen zijn alleen toegankelijk binnen dezelfde 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)"
}
}
Als de entiteit meerdere bijbehorende toegangsniveaus heeft, zoekt Swift het laagste toegangsniveau. Als er een privévariabele in een openbare klasse bestaat, wordt de variabele nog steeds als privé beschouwd.
Voorbeeld van subklasse
public class SuperClass {
private func secretMethod() {}
}
internal class SubClass: SuperClass {
override internal func secretMethod() {
super.secretMethod()
}
}
Getters en Setters-voorbeeld
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() {}
}