zgodnie z oficjalną dokumentacją swift

„Kontrola dostępu ogranicza dostęp do części kodu z kodu w innych plikach źródłowych i modułach. Ta funkcja umożliwia ukrycie szczegółów implementacji kodu i określenie preferowanego interfejsu, za pomocą którego można uzyskać dostęp do tego kodu i z niego korzystać.”

Swift 5 ma pięć kontroli dostępu. Są otwarte, publiczne,wewnętrzne, prywatne i prywatne. Te kontrole dostępu są definiowane na podstawie zastosowań w module I pliku źródłowego. W tym samouczku dowiemy się, co, gdzie i jak korzystać z kontroli dostępu w swift.

open (mniej restrykcyjne)

wszystko, co definiuje się za pomocą open, może być dostępne w module lub bez niego. podmioty o otwartym dostępie są dostępne z dowolnego miejsca. Oznacza to, że zmienna Otwarta może uzyskać dostęp, funkcja Otwarta może zastąpić, A klasa otwarta może być podklasą wewnątrz modułu i na zewnątrz modułu, importując ten moduł.

przykładem jest klasa „UITableViewCell” we frameworku UIKit. Możemy podklasować dowolną klasę jako klasę UITableViewCell importując moduł UIKit. Jeśli widzisz definicję „UITableViewCell”, zobaczysz otwartą kontrolę dostępu przed definicją klasy wewnątrz modułu UIKit. Dlatego możemy podklasować dowolną klasę jako klasę UITableViewCell importując UIKit.

@available(iOS 2.0, *)open class UITableViewCell : UIView, NSCoding, UIGestureRecognizerDelegate { }

publiczny (ograniczony niż otwarty)

podobnie jak otwarty dostęp, podmioty publiczne również mogą być dostępne w module lub poza nim. Ale istnieje zasadnicza różnica między otwartą a publiczną.

Klasa Publiczna nie może być podklasowana, a metoda Publiczna nie może być nadpisana poza zdefiniowanym modułem. Musi mieć podklasę lub nadpisać w module, w którym zostały zdefiniowane.

sprawdź poniższy przykład

//module 1open class X{}
open func bar(){}public class Y{}
public func foo(){}//module 2class A: X{} // success
override func bar(){} // successclass B: Y{} //error
override func foo(){} // error

wewnętrzna ( kontrola dostępu na poziomie modułu)

„wewnętrzna” umożliwia korzystanie z elementów w dowolnym miejscu wewnątrz zdefiniowanego modułu. „wewnętrzny” jest domyślnym poziomem dostępu. Zwykle moduł to framework lub aplikacja, która może być używana jako pojedyncza jednostka.

wewnątrz celu (modułu) wszystkie jednostki są domyślnie wewnętrzne (jeśli wyraźnie nie zdefiniowano żadnej kontroli dostępu). Jest to zdefiniowane w ten sposób, że wszystko wewnątrz modułu może być dostępne dla każdego z dowolnego miejsca w tym module.

fileprivate( Kontrola dostępu na poziomie plików)

encje fileprivate mogą być dostępne tylko w pliku swift. Plik swift może mieć kilka klas lub struktur. Wszystkie prywatne podmioty w pliku swift mogą być dostępne dla wszystkich klas lub struktur w tym pliku. Bez nich żadne inne klasy spoza tego pliku nie mogą uzyskać do nich dostępu. Zazwyczaj ukrywa implementację z innych plików źródłowych modułu.

//** ViewController.swift **//class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad() let a = A()
a.x()
a.z() //error let b = B()
b.Y() // error
}
}class A {fileprivate func x(){
print("Inside ViewController file")
}
}
//** SecondViewController.swift **//class B{fileprivate func Y(){
print("Outside ViewController file")
}
}extension A{
fileprivate func Z(){
print("Outside ViewController file, extension of A")
}
}

prywatna( Kontrola dostępu na poziomie klasy)

prywatna jest najczęściej używaną i najbardziej ograniczoną kontrolą dostępu. Podmioty prywatne mogą uzyskać dostęp tylko w obrębie zadeklarowanej klasy (w tym rozszerzenia). Jest zwykle używany do ukrywania wewnętrznej implementacji lub funkcjonalności poza określoną klasą.

// ** ViewController.swift **//class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
x()
let a = A()
a.Y() // error
}
}extension ViewController{
private func x(){
print("Inside x")
}
}class A {
private func Y(){
print("Inside Y")
}
}

różnica między szybką kontrolą dostępu

teraz zobaczymy różnicę między tymi modyfikatorami dostępu w oparciu o różne parametry w formie tabelarycznej

Gratulacje 🎉 🎉 🎉 domyślam się, że teraz masz pojęcie o kontroli dostępu w języku programowania Swift. Znajdziesz krótką dyskusję na ich temat w oficjalnej dokumentacji swift.

jeśli uważasz, że ten artykuł jest przydatny, podziel się i daj trochę klaskać 👏 👏 👏
sprawdź moje inne artykuły na medium i Połącz mnie na LinkedIn.

dziękuję za przeczytanie&Szczęśliwego kodowania 🙂

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.