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

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

  1. Nota sottoclasse:

Una sottoclasse non può avere un accesso superiore rispetto alla sua superclasse.

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

  1. Nota generale:

Altri tipi di entità includono: inizializzatori, protocolli, estensioni, generici e alias di tipo

Esempio di base usando una Struct

3.0

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


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow