De acuerdo con la documentación oficial de swift

» El control de acceso restringe el acceso a partes de su código desde el código de otros archivos y módulos de origen. Esta función le permite ocultar los detalles de implementación de su código y especificar una interfaz preferida a través de la cual se puede acceder a ese código y usarlo.»

Swift 5 tiene cinco controles de acceso. Son abiertos, públicos, internos, privados y privados. Esos controles de acceso se definen en función de los usos en el módulo y el archivo de origen. En este tutorial, aprenderemos qué, dónde y cómo usar el control de acceso en swift.

abierto (menos restrictivo)

Se puede acceder a cualquier cosa definida con abierto dentro o sin el módulo. se puede acceder a las entidades de nivel de acceso abierto desde cualquier lugar. Eso significa que una variable abierta puede acceder, una función abierta puede anular y la clase abierta puede ser subclase dentro de un módulo y fuera de un módulo importando ese módulo.

Un ejemplo es la clase» UITableViewCell » en el framework UIKit. Podemos subclasificar cualquier clase como clase UITableViewCell importando el módulo UIKit. Si ve la definición de «UITableViewCell», verá el control de acceso abierto antes de la definición de clase dentro del módulo UIKit. Es por eso que podemos subclasificar cualquier clase como clase UITableViewCell importando UIKit.

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

público (restrictivo que abierto)

Al igual que el acceso abierto, también se puede acceder a entidades públicas dentro o fuera de un módulo. Pero hay una gran diferencia entre público y abierto.

la clase pública no se puede subclasificar y el método público no se puede sobrescribir fuera del módulo definido. Debe tener que subclase o sobreescribir dentro del módulo donde se definieron.

Compruebe el siguiente ejemplo

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

interno ( control de acceso a nivel de módulo)

«interno» habilita el uso de entidades en cualquier lugar dentro del módulo definido. «interno» es el nivel de acceso predeterminado. Normalmente, un módulo es un marco o aplicación que se puede usar como una sola unidad.

Dentro de un destino (módulo) todas las entidades son por defecto internas (Si no se define explícitamente ningún control de acceso). Se define de esa manera que cualquier persona puede acceder a todo dentro del módulo desde cualquier lugar dentro de ese módulo.

fileprivate (control de acceso a nivel de archivo)

solo se puede acceder a entidades fileprivate dentro de un archivo swift. Un archivo swift puede tener varias clases o estructuras. Todas las clases o estructuras de ese archivo pueden acceder a todas las entidades privadas del archivo dentro de un archivo swift. Sin ellos, ninguna otra clase fuera de ese archivo puede acceder a ellos. Generalmente oculta la implementación de otros archivos fuente del módulo.

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

privado( control de acceso a nivel de clase)

privado es el control de acceso más utilizado y más restringido. Las entidades privadas solo pueden acceder dentro de la clase (incluida la extensión) que declararon. Generalmente se usa para ocultar la implementación o funcionalidad interna fuera de una clase específica.

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

Diferencia entre el control de acceso swift

Ahora veremos la diferencia entre esos modificadores de acceso basados en diferentes parámetros como una forma tabular

Felicitaciones guess supongo que ahora tienes alguna idea sobre el control de acceso en el lenguaje de programación swift. Encontrará un breve análisis de ellos en la documentación oficial de swift.

Si te ha parecido útil este artículo, comparte y aplaude Revisa mis otros artículos en Medium y conéctame en LinkedIn.

Gracias por leer & Feliz codificación 🙂

Deja una respuesta

Tu dirección de correo electrónico no será publicada.