¿Qué significa la palabra clave `open` en Swift y en qué se diferencia de `public`?
¡Hola a todos! Empecé a estudiar Swift recientemente y tengo confusión con los modificadores de acceso. En la documentación leí sobre `public`, `internal`, `fileprivate` y `private`, pero luego me topé con `open`.
Entiendo que `public` hace que una clase o método sea accesible desde otro módulo. Pero, ¿para qué se necesita `open`? ¿Acaso `public` no hace lo mismo?
Aquí hay un ejemplo: creé mi propio framework y quiero que los usuarios no solo puedan usar mi clase, sino también heredar de ella. Si pongo `public`, la clase será visible, pero el compilador no permitirá heredar de ella. Si pongo `open`, la herencia está permitida. ¿Por qué es así?
También me confunde que `open` solo se puede aplicar a clases y miembros de clase. Y para estructuras y protocolos, según entendí, `open` no se usa. ¿Es cierto?
Y otra pregunta: si estoy escribiendo una aplicación normal (no un framework), ¿necesito usar `open`? ¿O es suficiente con `public`?
Agradecería una explicación con ejemplos, porque en la documentación oficial...