Selon la documentation officielle de swift

 » Le contrôle d’accès restreint l’accès à des parties de votre code à partir du code dans d’autres fichiers et modules sources. Cette fonctionnalité vous permet de masquer les détails d’implémentation de votre code et de spécifier une interface préférée via laquelle ce code peut être consulté et utilisé. »

Swift 5 dispose de cinq contrôles d’accès. Ils sont ouverts, publics, internes, privés et privés. Ces contrôles d’accès sont définis en fonction des utilisations du module et du fichier source. Dans ce tutoriel, nous allons apprendre quoi, où et comment utiliser le contrôle d’accès dans swift.

open (moins restrictif)

Tout ce qui est défini avec open est accessible dans ou sans le module. les entités de niveau d’accès ouvert sont accessibles de n’importe où. Cela signifie qu’une variable ouverte peut accéder, une fonction ouverte peut remplacer et une classe ouverte peut être une sous-classe à l’intérieur d’un module et à l’extérieur d’un module en important ce module.

Un exemple est la classe « UITableViewCell » dans le framework UIKit. Nous pouvons sous-classer n’importe quelle classe en tant que classe UITableViewCell en important le module UIKit. Si vous voyez la définition de « UITableViewCell », vous verrez un contrôle d’accès ouvert avant la définition de la classe dans le module UIKit. C’est pourquoi nous pouvons sous-classer n’importe quelle classe en tant que classe UITableViewCell en important UIKit.

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

public (restrictif que ouvert)

Comme l’accès ouvert, les entités publiques sont également accessibles à l’intérieur ou à l’extérieur d’un module. Mais il y a une différence majeure entre ouvert et public.

la classe publique ne peut pas être sous-classée et la méthode publique ne peut pas être remplacée en dehors du module défini. Doit avoir à sous-classer ou à remplacer dans le module où ils ont défini.

Vérifiez l’exemple ci-dessous

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

interne (contrôle d’accès au niveau du module)

« interne » permet d’utiliser des entités n’importe où à l’intérieur du module défini. « interne  » est le niveau d’accès par défaut. Normalement, un module est un framework ou une application qui peut être utilisé comme une seule unité.

À l’intérieur d’une cible (module), toutes les entités sont par défaut internes (si elles n’ont explicitement défini aucun contrôle d’accès). Il est défini de cette façon que tout ce qui se trouve à l’intérieur du module peut être consulté par n’importe qui de n’importe où dans ce module.

fileprivate (contrôle d’accès au niveau des fichiers)

seules les entités fileprivate peuvent être accessibles dans un fichier swift. Un fichier swift peut avoir plusieurs classes ou structures. Toutes les entités privées de fichiers dans un fichier swift sont accessibles par toutes les classes ou structures de ce fichier. Sans eux, aucune autre classe en dehors de ce fichier ne peut y accéder. Il masque généralement l’implémentation des autres fichiers sources du module.

//** 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 (contrôle d’accès au niveau de la classe)

private est le contrôle d’accès le plus utilisé et le plus restreint. Les entités privées ne peuvent accéder qu’à la classe (y compris l’extension) qu’elles ont déclarée. Il est généralement utilisé pour masquer l’implémentation ou la fonctionnalité interne en dehors d’une classe spécifique.

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

Différence entre le contrôle d’accès swift

Maintenant, nous verrons la différence entre ces modificateurs d’accès en fonction de différents paramètres sous forme de tableau

Félicitations now Je suppose que maintenant vous avez une idée du contrôle d’accès dans le langage de programmation swift. Vous en trouverez une brève discussion sur la documentation officielle swift.

Si vous avez trouvé cet article utile, partagez et applaudissez please
Consultez mes autres articles sur Medium et connectez-moi sur LinkedIn.

Merci d’avoir lu & Bon codage 🙂

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.