无法将 Double 转换为预期的参数类型 CGFloat

Cannot convert Double to expected argument type CGFloat

如何将此函数转换为 swift?我收到一个我不明白的错误。您的 class.

中需要 "import QuartzCore"

Objective C代码

void DrawGridlines(CGContextRef context, CGFloat x, CGFloat width)
{
    for (CGFloat y = -48.5; y <= 48.5; y += 16.0)
    {
        CGContextMoveToPoint(context, x, y);
        CGContextAddLineToPoint(context, x + width, y);
    }
    CGContextSetStrokeColorWithColor(context, graphLineColor());
    CGContextStrokePath(context);
}

Swift代码

func DrawGridLines(context:CGContextRef, x:CGFloat, width:CGFloat)
{
    for var y = -48.5; y <= 48.5; y += 16.0
    {
        CGContextMoveToPoint(context, x, y);
        CGContextAddLineToPoint(context, x + width, y);
    }
    //CGContextSetStrokeColorWithColor(context, graphLineColor());
    //CGContextStrokePath(context);
}

Swift 对变量类型非常严格。由于您没有给 y 类型,Swift 推断它是 Double.

变量 y 需要是 CGFloat 因为它传递给的函数原型是 func CGContextMoveToPoint(c: CGContext?, _ x: CGFloat, _ y: CGFloat)。您可以在 for 语句中内联声明类型:

for var y:CGFloat = -48.5; y <= 48.5; y += 16.0

在我的例子中,我不得不将 Double 值转换为 CGFloat 并且错误消失了。

let newCGFloatVal = cgFloatVal * CGFloat(doubleVal)