El ObjectiveC.swift
archivo 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é open var
significa en este contexto, o cuál es la open
palabra clave en general?
open
ypublic
?")Respuestas:
open
es un nuevo nivel de acceso en Swift 3, introducido con la implementación deEstá disponible con la instantánea Swift 3 del 7 de agosto de 2016 y con Xcode 8 beta 6.
En breve:
open
clase es accesible y subclase fuera del módulo de definición. Unopen
miembro de la clase es accesible y reemplazable fuera del módulo de definición.public
clase es accesible pero no subclase fuera del módulo de definición. Unpublic
miembro de la clase es accesible pero no se puede anular fuera del módulo de definición.Así
open
es lo quepublic
solía ser en versiones anteriores de Swift y el acceso depublic
ha sido restringido. O, como lo expresa Chris Lattner en SE-0177: Permitir distinguir entre acceso público y sobreescritura pública :En su ejemplo,
open var hashValue
es una propiedad que es accesible y puede anularse enNSObject
subclases.Para más ejemplos y detalles, eche un vistazo a SE-0117 .
fuente
public
en Swift 3 es comopublic final
en Swift 2, yopen
es comopublic
?Leer abierto como
Repito abierto para herencia en otros módulos. Entonces, una clase abierta está abierta para la subclase 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 :
fuente
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 obtener más detalles, consulte la documentación de Apple sobre control de acceso
fuente
A excepción de la subclase,
open class func
también se puede acceder a una desde cualquier parte de su proyecto. Digamos que está definiendo una función de clase abierta en su clase Util como estaLuego, en cualquier lugar de sus controladores de vista, simplemente puede acceder a este método llamando
fuente
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.
fuente
abierto es solo para otro módulo, por ejemplo: vainas de cacao, o prueba unitaria, podemos heredar o anular
fuente