objetos - que es self en swift
Cómo hacer que una propiedad de instancia solo sea visible para la subclase swift (2)
El control de acceso a lo largo de las líneas de herencia realmente no encaja con las filosofías de diseño detrás de Swift y Cocoa:
Al diseñar los niveles de control de acceso en Swift, consideramos dos casos de uso principales:
- mantener
private
detallesprivate
de una clase ocultos del resto de la aplicación- mantener
internal
detallesinternal
de un marco oculto de la aplicación clienteEstos corresponden a niveles de acceso
private
einternal
, respectivamente.En contraste,
protected
combina el acceso con la herencia, agregando un eje de control completamente nuevo para razonar. En realidad, no ofrece ninguna protección real, ya que una subclase siempre puede exponer la API "protegida" a través de un nuevo método o propiedad pública. Tampoco ofrece oportunidades de optimización adicionales, ya que las nuevas sustituciones pueden provenir de cualquier lugar. Y es innecesariamente restrictivo: permite que las subclases, pero no cualquiera de los ayudantes de la subclase, accedan a algo.
Hay una explicación más detallada en el blog Swift de Apple .
Estoy intentando declarar una propiedad de instancia en swift para que solo sea visible para su clase y subclases. Creo que esto sería referido como una propiedad protegida en otros idiomas. ¿Hay alguna manera de lograr esto en Swift?
Una forma de hacerlo es definir la función o propiedad con la palabra clave fileprivate
y definir la subclase en el mismo archivo de esta manera:
class Parent {
fileprivate var someProperty: Any?
}
class Child: Parent {
func someFunction() {
print(someProperty)
}
}
Por supuesto, esto es súper molesto, ya que ese archivo será un gran lío. Sin mencionar por qué Swift permite esto pero no está protected
es solo ... argh.