Swift Double无法转换为CGFloat

dcb*_*nji 24 casting cgfloat swift

当我到达以下行时,我正在尝试绘制一个简单的圆圈我得到错误"Double是不可转换为CGFloat下的 startAngle = 0.0

path.addArcWithCenter(center, radius: radius, startAngle: 0.0, endAngle: Float(M_PI) * 2.0, clockwise: true)
Run Code Online (Sandbox Code Playgroud)

如何"转换"0.0以使其在Swift中成为CGFloat?

我写的完整功能:

func drawCircle() {
    // Drawing code
    var bounds:CGRect = secondView.bounds
    var center = CGPoint()
    center.x = bounds.origin.x + bounds.size.width / 2.0
    center.y = bounds.origin.y + bounds.size.height / 2.0
    var radius = (min(bounds.size.width, bounds.size.height) / 2.0)
    var path:UIBezierPath = UIBezierPath()
    path.addArcWithCenter(center, radius: radius, startAngle: CGFloat(0.0), endAngle: Float(M_PI) * 2.0, clockwise: true)
    path.stroke()    
}
Run Code Online (Sandbox Code Playgroud)

Con*_*nor 26

将需要CGFloat的值转换为CGFloat.

path.addArcWithCenter(center, radius: CGFloat(radius), startAngle: CGFloat(0.0), endAngle: CGFloat(M_PI) * 2.0, clockwise: true)
Run Code Online (Sandbox Code Playgroud)

如果你只是传递一个文字,startAngle可能不需要转换.另请注意,这不是C样式转换,而是实际在不同的Swift类型之间进行转换.

编辑:看看你的整个功能,这是有效的.

func drawCircle() {
        // Drawing code
        var bounds:CGRect = self.view.bounds
        var center = CGPoint()
        center.x = bounds.origin.x + bounds.size.width / 2.0
        center.y = bounds.origin.y + bounds.size.height / 2.0
        var radius = (min(bounds.size.width, bounds.size.height) / 2.0)
        var path:UIBezierPath = UIBezierPath()
        path.addArcWithCenter(center, radius: CGFloat(radius), startAngle: CGFloat(0.0), endAngle: CGFloat(Float(M_PI) * 2.0), clockwise: true)
        path.stroke()    
    }
Run Code Online (Sandbox Code Playgroud)


The*_*Art 8

你必须通过CGFloat(0.0)输入它.由于在Obj-C中,CGFloat根据目标(64位对32位)转换为浮点或双精度,因此在整个测试版Xcode 6中对CGFloat进行了不同的评估.你必须在Swift中输入一个数字到CGFloat来使用CGFloat,因为你永远不能保证有一个浮点数或一个double(因为这取决于环境).通过这种方式,Swift不会放弃,并且仍然是"类型"安全的.