podle oficiální dokumentace swift

“ řízení přístupu omezuje přístup k částem vašeho kódu z kódu v jiných zdrojových souborech a modulech. Tato funkce umožňuje skrýt podrobnosti o implementaci vašeho kódu a určit preferované rozhraní, pomocí kterého lze tento kód přistupovat a používat.“

Swift 5 má pět řízení přístupu. Jsou otevřené, veřejné, interní, souborové a soukromé. Tyto ovládací prvky přístupu jsou definovány na základě použití v modulu a zdrojovém souboru. V tomto tutoriálu se dozvíme, co, kde a jak používat řízení přístupu ve Swiftu.

open (méně restriktivní)

cokoliv definuje s open lze přistupovat v rámci nebo bez modulu. entity na úrovni otevřeného přístupu jsou přístupné odkudkoli. To znamená, že otevřená proměnná může přistupovat, otevřená funkce může přepsat a otevřená třída může být podtřídy uvnitř modulu a mimo modul importováním tohoto modulu.

příkladem je třída „UITableViewCell“ v rámci UIKit. Můžeme podtřídu jakoukoli třídu jako třídu UITableViewCell importem modulu UIKit. Pokud vidíte definici „UITableViewCell“, uvidíte Otevřené řízení přístupu před definicí třídy uvnitř modulu UIKit. To je důvod, proč můžeme subclassing jakoukoli třídu jako třídu UITableViewCell importem UIKit.

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

public (restrictive than open)

stejně jako open access, veřejné subjekty mohou být také přístupné uvnitř nebo vně modulu. Existuje však zásadní rozdíl mezi otevřeným a veřejným.

veřejnou třídu nelze podtřídit a veřejnou metodu nelze přepsat mimo definovaný modul. Musí mít podtřídy nebo přepsat v modulu, kde jsou definovány.

zkontrolujte příklad níže

//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

interní (řízení přístupu na úrovni modulu)

„interní“ umožňuje použití entit kdekoli uvnitř definovaného modulu. „interní“ je výchozí úroveň přístupu. Modul je obvykle rámec nebo aplikace, které lze použít jako jednu jednotku.

uvnitř cíle (modulu) jsou všechny entity ve výchozím nastavení interní (pokud explicitně nedefinovaly žádné řízení přístupu). Je to definováno tak, že všechno uvnitř modulu může být přístupné kýmkoli odkudkoli v rámci tohoto modulu.

fileprivate (řízení přístupu na úrovni souborů)

fileprivate entity mohou být přístupné pouze v souboru swift. Soubor swift může mít několik tříd nebo struktur. Všechny soukromé subjekty souborů uvnitř souboru swift jsou přístupné všemi třídami nebo strukturami v tomto souboru. Bez nich, žádné jiné třídy mimo tento soubor k nim nemají přístup. Obecně skryje implementaci z jiných zdrojových souborů modulu.

//** 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")
}
}

private (class-level access control)

private je nejpoužívanější a nejvíce omezené řízení přístupu. Soukromé subjekty mají přístup pouze v rámci třídy (včetně rozšíření), které deklarovaly. Obvykle se používá ke skrytí interní implementace nebo funkčnosti mimo konkrétní třídu.

// ** 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")
}
}

rozdíl mezi řízením přístupu swift

nyní uvidíme rozdíl mezi těmito modifikátory přístupu založenými na různých parametrech jako tabulkový formulář

gratuluji 🎉 🎉 🎉 myslím, že teď máte nějakou představu o řízení přístupu v programovacím jazyce Swift. Krátkou diskusi o nich najdete v oficiální dokumentaci swift.

pokud vám tento článek připadal užitečný, prosím sdílejte a trochu tleskejte 👏 👏 👏
zkontrolujte mé další články na médiu a připojte mě na LinkedIn.

děkujeme za přečtení & šťastné kódování 🙂

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.