Avatar ·

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