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

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

  1. Underklassning Anmärkning:

En underklass kan inte ha högre åtkomst än dess superklass.

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

  1. Allmän anmärkning:

Andra typer av enheter inkluderar: Initierare, protokoll, tillägg, generiska och typ alias

Grundexempel med hjälp av en struktur

3,0

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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow