Szukaj…


Składnia

  • projekt prywatnej klasy
  • let car = Car („Ford”, model: „Escape”) // domyślnie wewnętrzny
  • gatunek publiczny
  • private func replaceMarketCap ()
  • przesłonić wewnętrzny func setupViewView ()
  • private (set) var area = 0

Uwagi

  1. Uwaga podstawowa:

Poniżej znajdują się trzy poziomy dostępu od najwyższego dostępu (najmniej ograniczający) do najniższego dostępu (najbardziej ograniczający)

Publiczny dostęp umożliwia dostęp do klas, struktur, zmiennych itp. Z dowolnego pliku w modelu, ale co ważniejsze poza modułem, jeśli zewnętrzny plik importuje moduł zawierający publiczny kod dostępu. Podczas tworzenia frameworku popularne jest korzystanie z publicznego dostępu.

Dostęp wewnętrzny pozwala na korzystanie z plików tylko w module encji. Wszystkie podmioty mają domyślnie poziom dostępu wewnętrznego (z kilkoma wyjątkami).

Prywatny dostęp zapobiega użyciu encji poza tym plikiem.

  1. Uwaga podklasy:

Podklasa nie może mieć wyższego dostępu niż jej nadklasa.

  1. Uwaga Gettera i Setera:

Jeśli ustawiający właściwość jest prywatny, to getter jest wewnętrzny (co jest ustawieniem domyślnym). Możesz także przypisać poziom dostępu zarówno dla gettera, jak i setera. Zasady te dotyczą również indeksów dolnych

  1. Uwaga ogólna:

Inne typy jednostek to: Inicjatory, Protokoły, Rozszerzenia, Generyczne i Aliasy Typów

Podstawowy przykład użycia struktury

3.0

W Swift 3 istnieje wiele poziomów dostępu. W tym przykładzie użyto ich wszystkich oprócz 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)"
    }
}

Załóżmy, że myCar został zainicjowany w następujący sposób:

let myCar = Car("Apple", model: "iCar")

Car.make (publiczny)

print(myCar.make)

Ten wydruk będzie działał wszędzie, w tym w celach importujących Car .

Model samochodu (wewnętrzny)

print(myCar.model)

Skompiluje się, jeśli kod będzie w tym samym celu co Car .

Car.otherName (fileprivate)

print(myCar.otherName)

Działa to tylko wtedy, gdy kod znajduje się w tym samym pliku co Car .

Car.fullName (prywatny)

print(myCar.fullName)

Nie działa to w Swift 3. Dostęp do private właściwości można uzyskać tylko w ramach tej samej 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)"
    }
}

Jeśli jednostka ma wiele powiązanych poziomów dostępu, Swift szuka najniższego poziomu dostępu. Jeśli zmienna prywatna istnieje w klasie publicznej, będzie ona nadal uważana za prywatną.

Przykład podklasy

public class SuperClass {
    private func secretMethod() {}
}
 
internal class SubClass: SuperClass {
    override internal func secretMethod() {
        super.secretMethod()
    }
}

Przykład 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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow