Swift编译器错误:“Double”不能转换为CGFloat

我刚开始学习Swift。 我创build了一个游戏项目,并且出现了一个模板。 我什么都没有做任何代码。 我试图运行该项目,但popup一个编译器错误。

我正在做一个教程,所以可能是我的环境出了问题,或者这本书已经过时了。

Swift编译器错误:“Double”不能转换为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 */ } } 

let action = SKAction.rotateByAngle(M_PI, duration:1)

这是项目设置的屏幕截图 在这里输入图像说明

您可以使用CGFloat(M_PI)将其转换。

例如下面的代码应该在你的情况下工作(注意使用CGFloat

 let action = SKAction.rotateByAngle(CGFloat(M_PI), duration:1) 

您可以在代码中声明pi: let π = CGFloat(M_PI) ,然后使用let action = SKAction.rotateByAngle(π, duration:1)

如果你打算使用π很多,那就更简单了。

您可以使用快捷键alt + p键入π

如果您在32位iOS上运行,那么Double不能转换为CGFloat,您需要添加一个转换。