Sitemap
Kevin Morales

Kevin Morales

CEO @Meniuz | Founder @DevLokos | @GDGTsachilas Community Lead | @SpaceXAI Ambassador | @GitKraken Ambassador

Usa control de acceso en iOS

5 min readFeb 25, 2024

--

¡Hola amig@! Mi nombre es Kevin Morales y soy desarrollador mobile por más de 7 años. Hoy te estaré hablando acerca del control de acceso, el cual es una técnica de desarrollo para proporcionar beneficios significativos en términos de encapsulación, seguridad, modularidad y mantenimiento.

Es muy importante saber este tema, ya que te puede medir como desarrollador, usar el control de acceso en situaciones apropiadas puede permitir que una función no sea accesible desde una clase que no debería tener acceso.

Empezaremos con un concepto y definiendo los tipos de control de acceso que existen. Además, veremos una pequeña implementación de cada tipo.

Control de acceso

En el desarrollo de software, la organización y protección de datos son aspectos fundamentales. Hablando acerca iOS y Swift, el control de acceso desempeña un papel crucial para gestionar la visibilidad y la interacción entre diferentes partes de un código.

Existen cinco niveles de control de acceso que permiten definir quién puede acceder a una entidad específica. Cada uno tiene sus propias reglas y aplicaciones específicas.

Private

La palabra clave Private es la restricción de acceso más estricta en Swift. Cuando se marca una entidad como Private, solo es accesible dentro del ámbito de la declaración en la que está definida. Es decir, solo se puede acceder a ella desde el mismo archivo de Swift en el que se encuentra. Este nivel de control es ideal para encapsular detalles de implementación y reducir la exposición de detalles internos.

private class MiClasePrivada {
// Detalles de implementación
}

Fileprivate

La visibilidad Fileprivate extiende el alcance de private a todo el archivo en el que se declara la entidad. Esto significa que todas las clases, estructuras, enumeraciones, y demás, dentro del mismo archivo pueden acceder a la entidad marcada como Fileprivate. Es útil cuando se desea que múltiples tipos en el mismo archivo compartan acceso a ciertos elementos.

fileprivate let miVariableFilePrivate = 42

fileprivate func imprimirMiVariableFilePrivate() {
print("El valor de miVariableFilePrivate es \(miVariableFilePrivate)")
}

Internal

El nivel de acceso Internal es el predeterminado, es el que Apple implementa por defecto en sus plantillas al momento de usar un proyecto. Una entidad marcada como Internal es accesible desde cualquier parte del módulo en el que se encuentra definida.

// Mismas funciones 
internal func miFuncionInternal() {
// Lógica de la función
}

func miFuncionInternal() {
// Lógica de la función
}

Public

Cuando se declara una entidad como public, su visibilidad se extiende más allá del módulo en el que está definida. Otras aplicaciones y módulos pueden acceder a esta entidad, pero no pueden modificarla. Es una buena opción para elementos que deben ser utilizados externamente, pero no modificados.

public struct MiEstructuraPublica {
// Propiedades y métodos públicos
}

Open

El nivel de acceso Open es similar a public, pero con la diferencia clave de que las clases y métodos marcados como Open pueden ser subclasificados y sobrescritos por clases externas. Es útil cuando se desea permitir la herencia y la personalización desde otros módulos.

open class MiClaseAbierta {
// Detalles de la clase
}

Para finalizar hablaremos de Public y Open que si prestaste atención prácticamente son iguales, pero que los diferencia y cuando usar cada uno.

Public vs Open

Las palabras clave Public y Open son utilizadas para especificar diferentes niveles de acceso, y aunque comparten similitudes, tienen diferencias clave en cuanto a la extensibilidad desde módulos externos.

Get Kevin Morales’s stories in your inbox

Join Medium for free to get updates from this writer.

Public

  • Acceso: las entidades marcadas como Public son accesibles desde cualquier parte del módulo en el que están definidas.
  • Herencia y subclasificación: las clases marcadas como Public pueden ser subclasificadas dentro del mismo módulo, sin embargo, no desde módulos externos.
  • Sobreescritura de métodos: los métodos de una clase Public pueden ser sobrescritos por las clases que la heredan, pero solo dentro del mismo módulo.

Open

  • Acceso: al igual que Public, las entidades marcadas como Open son accesibles desde cualquier parte del módulo en el que están definidas.
  • Herencia y subclasificación: las clases marcadas como Open pueden ser subclasificadas tanto dentro como fuera del módulo en el que están definidas. Es decir, permite la herencia desde módulos externos.
  • Sobreescritura de métodos: al contrario de Public, los métodos de una clase Open pueden ser sobrescritos por las clases que la heredan, incluso si esas clases están en módulos externos.

Un ejemplo muy claro es al crear una librería y acceder desde el código padre a las funciones de esa librería. Es decir, es como estar construidas todas las librerías de terceros para el uso en nuestros proyectos.

// Librería extena
open class MiClaseAbierta {
open func miMetodoAbierto() {
print("Mensaje de librería")
}
}

En este ejemplo tendremos que acceder a la librería y podremos sobreescribir el método para modificarlo.

// En mi aplicación padre accederemos a la librería
import MiFramework

class MiSubclase: MiClaseAbierta {
override func miMetodoAbierto() {
super.miMetodoAbierto()
print("Modificación de mensaje desde mi aplicación padre")
}
}

¡Excelente! Ahora eres todo un experto para manejar el control de acceso en tus aplicaciones iOS, te invito a que lo apliques en tus proyectos a futuro.

Conclusión

En resumen, los desarrolladores pueden lograr un equilibrio entre la encapsulación de detalles internos y la exposición controlada de componentes para su reutilización y extensión. En última instancia, entender y aplicar estos niveles de acceso contribuye a la creación de un código más modular, mantenible y seguro en el desarrollo de aplicaciones iOS con Swift.

Recuerda

Aprende cada día y serás una nueva persona

¡Gracias por leer este artículo, estoy muy emocionado de seguir compartiendo mi conocimiento al mundo entero!

--

--

Kevin Morales
Kevin Morales