La surcharge d'opérateurs est la possibilité de définir ou de redéfinir le comportement des opérateurs standards (et personnalisés) pour les types utilisateurs. Cela permet d'écrire les opérations avec vos structures et classes de manière plus expressive.
Particularités :
static func avec le modificateur operator obligatoire dans la portée globale.Equatable, Comparable, etc.).infix, prefix, postfix) en les indiquant à l'aide des mots-clés correspondants.Exemple :
struct Vector2D { var x: Double var y: Double static func +(lhs: Vector2D, rhs: Vector2D) -> Vector2D { return Vector2D(x: lhs.x + rhs.x, y: lhs.y + rhs.y) } } let a = Vector2D(x: 1, y: 2) let b = Vector2D(x: 3, y: 4) let sum = a + b // Vector2D(x: 4, y: 6)
Nuances :
ExpressibleByBooleanLiteral, BooleanType).precedence group) pour les nouveaux opérateurs.Peut-on surcharger des opérateurs standards, tels que +, pour travailler avec des objets de classe, et que faut-il pour implémenter une comparaison de vos propres structures via == ?
Réponse : Oui, les opérateurs standards (par exemple, +, ==, <) peuvent être surchargés pour des structures et classes personnalisées. Pour comparer des structures/classes via ==, le type doit respecter le protocole Equatable et implémenter la fonction statique d'égalité :
Exemple :
struct Point: Equatable { let x: Int let y: Int static func ==(lhs: Point, rhs: Point) -> Bool { return lhs.x == rhs.x && lhs.y == rhs.y } }
Histoire
On a redéfini l'opérateur == pour une structure, mais on n'a pas implémenté hash(into:), tout en utilisant ce type comme clé dans un Set ou un dictionnaire. En conséquence, des éléments identiques étaient ajoutés au même ensemble deux fois ou n'étaient pas trouvés, car le mécanisme standard Hashable était violé.
Histoire
On a créé un opérateur infix personnalisé sans spécifier de precedence group. L'opérateur fonctionnait de manière inattendue selon des règles d'associativité illogiques, entraînant des erreurs dans les expressions complexes.
Histoire
Dans le projet, un opérateur | a été introduit pour fusionner des modèles, cependant, les débutants le confondaient souvent avec l'opération bit à bit OR, ce qui a provoqué une confusion et un traitement incorrect des données lors de la vérification légère des drapeaux booléens.