Swift binaire opérateur '+' ne peut pas être appliqué à deux opérandes CGFloat
Je suis en train d'écrire une fonction rapide pour détecter l'hexagone, je suis en cliquant sur. Mais je suis tombé sur un étrange message d'erreur indiquant que je ne peux pas ajouter deux CGFloats. Ce que j'ai fait, par exemple, changement de let
à var
, déclarer et d'attribuer séparément, ne fonctionne pas. Je suppose qu'il doit y avoir autre chose de mal, mais je ne la trouve pas. Le code est comme suit:
func pointToCoordinate(position: CGPoint) -> (Int, Int) {
var gridHeight = 2 * singleRadius / sqrt(CGFloat(3)) * 1.5
var gridWidth = 2 * singleRadius
var halfWidth = singleRadius
var relativePosition = CGPoint(x: position.x - totalRadius / 2, y: position.y - totalRadius / 2)
println((relativePosition.y / gridHeight))
var row = -(cgfloatToInt)(relativePosition.y / gridHeight)
var column: Int
println((relativePosition.x + halfWidth * CGFloat(row + 1)) / (gridWidth))
column = cgfloatToInt((relativePosition.x + halfWidth * CGFloat(row + 1)) / (gridWidth))
// var innerY: CGFloat = CGFloat(relativePosition.y) + CGFloat(gridHeight * row)
var innerX = relativePosition.x
var innerY = relativePosition.y
innerY = innerY - CGFloat(gridHeight * row)
println((innerX, innerY))
return (column, row)
}
OriginalL'auteur Colliot | 2015-06-06
Vous devez vous connecter pour publier un commentaire.
Le message d'erreur est erroné. Le problème, c'est que vous essayez de multiplier une
Int
et unCGFloat
.Remplacer:
avec:
La réponse ci-dessus est pour la version actuelle de votre code. Pour le commentaire sur la version qui correspond le message d'erreur que vous avez posté:
Remplacer:
avec
Merci cela a fonctionné pour moi. 🙂
OriginalL'auteur vacawama
De regarder à travers toutes les réponses, de pièces coulées, de conversion et d'extensions, je pense que la meilleure solution encore à dire pour Swift est Opérateur de Surcharge. L'exemple de Code ci-dessous pour Swift 3.0:
Mettre ceci en place à l'EXTÉRIEUR de toute la classe. Voir la magie se produit.
OriginalL'auteur Michael Shang
En effet, il y a autre chose de mal, cela fonctionne:
et
CGFloat
met en œuvre laFloatingPointType
typeOriginalL'auteur Chris Conover
Tard pour les rejoindre. Basé sur vacawama la réponse, vous la connaissez tous le problème n'est pas d'avoir le même type de données.
CGFloat
doit être écrit à plusieurs reprises, parfois. J'ai trouvé cela plus facile par l'intermédiaire de l'extension. Si le partage d'une réponse. Vous pouvez créer une simple extension comme ci-dessous. Bien sûr, cette extension peut être encore modifié.Maintenant, nous pouvons écrire
OriginalL'auteur san