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

时间:2015-10-10 21:07:35

标签: swift quartz-core

如何将此功能转换为swift?我收到一个我不明白的错误。您需要在班上“导入QuartzCore”。

目标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 Code

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);
}

1 个答案:

答案 0 :(得分:3)

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