variable imprimir declarar swift swift3 syntax declaration modifier

imprimir - ¿Cuál es la palabra clave "abierta" en Swift?



swift variables (6)

A excepción de la subclase, también se puede acceder a una open class func desde cualquier parte de su proyecto. Digamos que está definiendo una función de clase abierta en su clase Util como esta

open class Utils: NSObject { open class func printHello() { print("Hello from utils") } }

Luego, en cualquier lugar de sus controladores de vista, simplemente puede acceder a este método llamando

Utils.printHello()

El archivo ObjectiveC.swift de la biblioteca estándar contiene las siguientes líneas de código alrededor de la línea 228:

extension NSObject : Equatable, Hashable { /// ... open var hashValue: Int { return hash } }

¿Qué significa open var en este contexto, o cuál es la palabra clave open en general?


Leer abierto como

abierto para herencia en otros módulos

Repito abierto para herencia en otros módulos. Entonces, una clase abierta está abierta para subclasificar en otros módulos que incluyen el módulo de definición. Las variables y funciones abiertas están abiertas para anular en otros módulos. Es el nivel de acceso menos restrictivo. Es tan bueno como el acceso público aceptar que algo que es público está cerrado por herencia en otros módulos.

De Apple Docs :

El acceso abierto solo se aplica a las clases y a los miembros de la clase, y difiere del acceso público de la siguiente manera:

  1. Las clases con acceso público, o cualquier nivel de acceso más restrictivo, pueden subclasificarse solo dentro del módulo donde están definidas.

  2. Los miembros de la clase con acceso público, o cualquier nivel de acceso más restrictivo, pueden ser anulados por subclases solo dentro del módulo donde están definidos.

  3. Las clases abiertas pueden subclasificarse dentro del módulo donde están definidas, y dentro de cualquier módulo que importe el módulo donde están definidas.

  4. Los miembros de la clase abierta pueden ser anulados por subclases dentro del módulo donde están definidos, y dentro de cualquier módulo que importe el módulo donde están definidos.

Open es un nivel de acceso, se introdujo para imponer limitaciones a la herencia de clases en Swift.

Esto significa que el nivel de acceso abierto solo se puede aplicar a clases y miembros de clase .

En clases

Una clase abierta se puede subclasificar en el módulo en el que se define y en los módulos que importan el módulo en el que se define la clase.

Miembros de la clase

Lo mismo se aplica a los miembros de la clase. Un método abierto puede ser anulado por subclases en el módulo en el que se define y en los módulos que importan el módulo en el que se define el método.

LA NECESIDAD DE ESTA ACTUALIZACIÓN

Algunas clases de bibliotecas y frameworks no están diseñadas para ser subclasificadas y hacerlo puede provocar un comportamiento inesperado. La biblioteca nativa de Apple tampoco permitirá anular los mismos métodos y clases,

Entonces, después de esta adición, aplicarán los niveles de acceso público y privado en consecuencia.

Para más detalles, consulte la documentación de Apple sobre control de acceso


abierto es solo para otro módulo, por ejemplo: vainas de cacao, o prueba unitaria, podemos heredar o anular


abierto ven a jugar cuando se trata de múltiples módulos.

La clase abierta es accesible y subclase fuera del módulo de definición. Un miembro de clase abierto es accesible y reemplazable fuera del módulo de definición.


open es un nuevo nivel de acceso en Swift 3, introducido con la implementación de

Está disponible con la instantánea Swift 3 del 7 de agosto de 2016 y con Xcode 8 beta 6.

En breve:

  • Una clase open es accesible y subclase fuera del módulo de definición. Un miembro de clase open es accesible y reemplazable fuera del módulo de definición.
  • Una clase public es accesible pero no subclase fuera del módulo de definición. Un miembro de la clase public es accesible pero no se puede anular fuera del módulo de definición.

Tan open es lo que solía ser público en versiones anteriores de Swift y el acceso del public ha sido restringido. O, como lo expresa Chris Lattner en SE-0177: Permitir distinguir entre acceso público y sobreescritura pública :

"Abierto" ahora es simplemente "más público que público", proporcionando un modelo muy simple y limpio.

En su ejemplo, open var hashValue es una propiedad que es accesible y puede ser anulada en NSObject subclases de NSObject .

Para más ejemplos y detalles, eche un vistazo a SE-0117 .