不能将Double转换为预期的参数类型CGFloat



如何将此函数转换为swift?我得到一个错误,我不明白。你需要在你的类中输入"import 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);
}

斯威夫特代码

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)

相关内容

最新更新