Swift Double无法转换为CGFloat

时间:2014-08-05 02:11:24

标签: casting swift cgfloat

当我到达以下行时,我试图绘制一个简单的圆圈我得到错误" Double startAngle = 0.0

下无法转换为CGFloat
path.addArcWithCenter(center, radius: radius, startAngle: 0.0, endAngle: Float(M_PI) * 2.0, clockwise: true)

我如何"演员" 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()    
}

4 个答案:

答案 0 :(得分:24)

将需要CGFloat的值转换为CGFloat。

path.addArcWithCenter(center, radius: CGFloat(radius), startAngle: CGFloat(0.0), endAngle: CGFloat(M_PI) * 2.0, clockwise: true)
如果您只是传递文字,那么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()    
    }

答案 1 :(得分:8)

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

答案 2 :(得分:1)

此错误将在 Swift 5.5 中消失。

答案 3 :(得分:0)

也许这不是一个好主意,但我使用NSNumber将Double转换为Float,然后转换为CGFloat。

let myFloat = NSNumber.init(value: myDouble).floatValue
let myCGFloat = CGFloat(myFloat)