Avatar ·

Quelle est la différence entre static func et class func en Swift ?

Bonjour ! J'ai commencé à apprendre Swift et je suis tombé sur deux façons similaires de déclarer des méthodes qui appartiennent au type lui-même, et non à son instance. En utilisant le mot-clé `static` avant `func`, je peux appeler une méthode sans créer d'objet. Mais j'ai aussi vu qu'on peut utiliser `class func` dans le même but. Par exemple : ```swift struct MyStruct { static func sayHello() { print("Bonjour de static !") } } class MyClass { class func sayHello() { print("Bonjour de class !") } } ``` Les deux appels fonctionnent : `MyStruct.sayHello()` et `MyClass.sayHello()`. Quelle est la différence fondamentale entre eux ? Pourquoi ne peut-on pas utiliser uniquement `static` partout ? Et y a-t-il des restrictions sur l'utilisation de `static` dans les classes ? Je serais reconnaissant pour une explication détaillée avec des exemples, surtout concernant l'héritage, car j'ai entendu dire que c'est le point clé ici. <<>>

Méthodes statiques et méthodes de classe : la différence clé dans l'héritage

La différence entre static func et class func réside dans le fait que static ne peut pas être surchargé dans une sous-classe, tandis que class le permet. En d'autres termes, static est implicitement final, empêchant toute redéfinition. class func peut être surchargé par une sous-classe, à condition de ne pas être marqué final. Dans les structures, seules les méthodes static sont disponibles, car les structures ne supportent pas l'héritage. Dans les classes, vous pouvez utiliser les deux, mais static est utile lorsque vous voulez garantir qu'une méthode ne sera pas modifiée par héritage.