Swift Language
Åtkomstkontroll
Sök…
Syntax
- privat klass projekt
- let car = Car ("Ford", modell: "Escape") // standard intern
- public enum Genre
- privat func calculMarketCap ()
- åsidosätta intern func setupView ()
- privat (set) var area = 0
Anmärkningar
- Grundläggande anmärkning:
Nedan visas de tre åtkomstnivåerna från högsta åtkomst (minst begränsande) till lägsta åtkomst (mest begränsande)
Allmän tillgång tillåter åtkomst till klasser, strukturer, variabler etc från vilken fil som helst i modellen, men ännu viktigare utanför modulen om den externa filen importerar modulen som innehåller den allmänna åtkomstkoden. Det är populärt att använda allmänhetstillträde när du skapar ett ramverk.
Intern åtkomst tillåter filer endast med enhetens modul att använda enheterna. Alla enheter har en intern tillståndsnivå som standard (med några få undantag).
Privat åtkomst förhindrar att enheten används utanför den filen.
- Underklassning Anmärkning:
En underklass kan inte ha högre åtkomst än dess superklass.
- Getter & Setter Anmärkning:
Om fastighetsförläggaren är privat är gettern intern (som är standard). Du kan också tilldela åtkomstnivå för både getter och setter. Dessa principer gäller också för abonnemang
- Allmän anmärkning:
Andra typer av enheter inkluderar: Initierare, protokoll, tillägg, generiska och typ alias
Grundexempel med hjälp av en struktur
I Swift 3 finns det flera åtkomstnivåer. Detta exempel använder dem alla utom för 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)"
}
}
Anta att myCar
initialiserades så här:
let myCar = Car("Apple", model: "iCar")
Car.make (offentligt)
print(myCar.make)
Detta tryck fungerar överallt, inklusive mål som importerar Car
.
Car.model (intern)
print(myCar.model)
Detta kommer att sammanställas om koden är i samma mål som Car
.
Car.otherName (fileprivat)
print(myCar.otherName)
Detta fungerar bara om koden finns i samma fil som Car
.
Car.fullName (privat)
print(myCar.fullName)
Detta fungerar inte i Swift 3. private
fastigheter kan endast nås inom samma 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)"
}
}
Om enheten har flera associerade åtkomstnivåer letar Swift efter den lägsta åtkomstnivån. Om en privat variabel finns i en offentlig klass, kommer variabeln fortfarande att betraktas som privat.
Exempel på underklassning
public class SuperClass {
private func secretMethod() {}
}
internal class SubClass: SuperClass {
override internal func secretMethod() {
super.secretMethod()
}
}
Exempel på Getters and Setters
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() {}
}