Que signifie le mot-clé `open` en Swift et en quoi diffère-t-il de `public` ?
Bonjour à tous ! J'ai commencé à étudier Swift récemment et j'ai une confusion avec les modificateurs d'accès. Dans la documentation, j'ai lu sur `public`, `internal`, `fileprivate` et `private`, mais ensuite je suis tombé sur `open`.
Je comprends que `public` rend une classe ou une méthode accessible depuis un autre module. Mais alors pourquoi `open` est-il nécessaire ? Est-ce que `public` ne fait pas la même chose ?
Voici un exemple : j'ai créé mon propre framework et je veux que les utilisateurs puissent non seulement utiliser ma classe, mais aussi en hériter. Si je mets `public`, la classe sera visible, mais le compilateur ne permettra pas d'en hériter. Si je mets `open` — l'héritage est autorisé. Pourquoi cela ?
Ce qui me trouble aussi, c'est que `open` ne peut être appliqué qu'aux classes et aux membres de classe. Pour les structures et les protocoles, comme je l'ai compris, `open` n'est pas utilisé. Est-ce vrai ?
Et encore une question : si j'écris une application ordinaire (pas un framework), dois-je utiliser `open` ? Ou `public` suffit-il ?
Je serais reconnaissant pour une explication avec des exemples, car dans la documentation officielle