Swift erreur de Compilateur: "Double" n'est pas convertible à CGFloat
J'ai juste commencé à apprendre Swift. J'ai créé un projet de jeu et un modèle venu. Je n'ai pas fait quelque chose pour le code que ce soit. J'ai essayé d'exécuter le projet, mais une erreur de compilateur surgi.
Je vais éteindre un tutoriel de sorte qu'il pourrait être quelque chose de mal avec mon environnement ou le livre est déjà dépassé.
Swift erreur de Compilateur: "Double" n'est pas convertible à CGFloat
import SpriteKit
class GameScene: SKScene {
override func didMoveToView(view: SKView) {
/* Setup your scene here */
let myLabel = SKLabelNode(fontNamed:"Chalkduster")
myLabel.text = "Hello, World!";
myLabel.fontSize = 65;
myLabel.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame));
self.addChild(myLabel)
}
override func mouseDown(theEvent: NSEvent) {
/* Called when a mouse click occurs */
let location = theEvent.locationInNode(self)
let sprite = SKSpriteNode(imageNamed:"Spaceship")
sprite.position = location;
sprite.setScale(0.5)
let action = SKAction.rotateByAngle(M_PI, duration:1)
sprite.runAction(SKAction.repeatActionForever(action))
self.addChild(sprite)
}
override func update(currentTime: CFTimeInterval) {
/* Called before each frame is rendered */
}
}
L'erreur se produit dans let action = SKAction.rotateByAngle(M_PI, duration:1)
Voici une capture d'écran des paramètres du projet
- La ligne à laquelle l'erreur apparaissent sur? Cliquez sur l'erreur sur la gauche dans la capture d'écran que vous avez posté et cela vous prendra à la ligne contenant l'erreur.
- ligne 23: laissez action = SKAction.rotateByAngle(M_PI, durée:1)
Vous devez vous connecter pour publier un commentaire.
Vous pouvez le convertir avec
CGFloat(M_PI)
.Par exemple, le code suivant devrait fonctionner dans votre cas (notez l'utilisation de
CGFloat
)Integer
(wrapper) oùint
(type sous-jacent) est prévu. Cela devrait être inoffensifs, car Swift n'a pas besoin d'être compatible avec C.Vous pouvez déclarer pi comme ça dans votre code :
let π = CGFloat(M_PI)
et ensuite utiliserlet action = SKAction.rotateByAngle(π, duration:1)
Si vous allez utiliser π beaucoup, c'est beaucoup plus simple.
Vous pouvez taper π avec le raccourci alt+p
L'ancien M_PI un Double, mais la fonction ne doit s'attendre à une CGFloat. Un casting serait la solution.
À l'égard de Swift 5 il serait maintenant:
Pas besoin de cast plus
Double
toujours n'est pas convertible àCGFloat
sans appel de laCGFloat
constructeur...