que objetos inicializadores herencia clases swift access-control

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 detalles private de una clase ocultos del resto de la aplicación
  • mantener internal detalles internal de un marco oculto de la aplicación cliente

Estos corresponden a niveles de acceso private e internal , 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.