J'écrivais un exemple de code dans un terrain de jeu et je voulais une fonction qui renvoie la distance entre deux valeurs, qui sont toutes deux conformes au protocole Strideable dans Swift afin que je puisse utiliser le distance(to other: Self) -> Self.Stride
fonction. Ma mise en œuvre se résume comme suit:Générique Où ambiguïté de la clause avec les types associés dans Swift
func distanceFrom<T: Strideable, U>(_ a: T, to b: T) -> U where T.Stride == U
{
return a.distance(to: b)
}
Après avoir observé cette fonction pendant un certain temps, je me suis aperçu que je ne savais pas que Stride était utilisé dans la clause where, celle de a
ou de b
. D'après ce que je comprends, il serait possible pour a
et b
de définir différents types associés pour Stride
. Aussi, je n'ai fait aucune déclaration pour m'assurer que a.Stride == b.Stride, bien que je comprenne que je pourrais développer ma clause where pour le faire.
Alors, lequel serait utilisé pour vérifier l'équivalence à U
? Pour être clair, la question ne concerne pas ce bloc de code particulier, mais plutôt toute situation dans laquelle cette ambiguïté existerait.
Je crois que a et b seraient tous deux conformes au protocole Strideable, mais ils pourraient être de types différents. J'ai testé l'appel de cette fonction avec un être un Int et b étant un Double et il compile et fonctionne comme prévu. – tnev
Veuillez réessayer en utilisant la capture d'écran et l'extrait de code que j'ai ajouté à ma réponse. Je crois qu'ils (les deux T) doivent être du même type. – Underhill