Swift3 Swift 3 GCFloat到GCRect

Swift3 Swift 3 GCFloat到GCRect,swift3,ios10,Swift3,Ios10,我正在我的Swift项目中使用此代码段。 以下代码在Swift 2中运行良好,但在Swift 3中似乎不再运行,它给出了以下错误: 无法将“CGFloat,CGFloat,Int,Int”类型的值分配给“CGRect”类型 有人知道我如何解决这个问题吗?谢谢你的帮助 谢谢D这条线plusLayer.frame=x,y,27,27 应该是 plusLayer.frame=x,y,27为CGFloat,27为CGFloat 这是因为CGRect初始值设定项需要4个相同类型的数字。看看Xcode建议:

我正在我的Swift项目中使用此代码段。 以下代码在Swift 2中运行良好,但在Swift 3中似乎不再运行,它给出了以下错误:

无法将“CGFloat,CGFloat,Int,Int”类型的值分配给“CGRect”类型

有人知道我如何解决这个问题吗?谢谢你的帮助

谢谢D

这条线plusLayer.frame=x,y,27,27

应该是 plusLayer.frame=x,y,27为CGFloat,27为CGFloat

这是因为CGRect初始值设定项需要4个相同类型的数字。看看Xcode建议: 这条线plusLayer.frame=x,y,27,27

应该是 plusLayer.frame=x,y,27为CGFloat,27为CGFloat

这是因为CGRect初始值设定项需要4个相同类型的数字。看看Xcode建议:

您需要显式强制转换一个Int类型以生成CGFloat:


您需要显式地将Int类型转换为CGFloat:


作为一名老开发人员,让我们澄清一下:

强制转换是某些语言的强大功能,但必须详细了解

b我们可以使用as进行转换,但与使用CGXX不同

c as必须用于对象的类型转换。 见: d CGRectMake在swift 2.x/xcode 7.3中工作

e不要将其转换为双精度,只需使用:

    let r = CGRect(x: 10, y: 20, width: 30, height: 40)
编译器将了解以下哪种方法调用:

public init(x: CGFloat, y: CGFloat, width: CGFloat, height: CGFloat)
public init(x: Double, y: Double, width: Double, height: Double)
public init(x: Int, y: Int, width: Int, height: Int)
我会打电话给3号

如果你写:

    let d = 10.0
    let r2 = CGRect(x: d, y: 20, width: 30, height: 40)
它会叫第二,因为d是双精度的


我的两分钱。

作为一名老开发人员,让我们澄清一下:

强制转换是某些语言的强大功能,但必须详细了解

b我们可以使用as进行转换,但与使用CGXX不同

c as必须用于对象的类型转换。 见: d CGRectMake在swift 2.x/xcode 7.3中工作

e不要将其转换为双精度,只需使用:

    let r = CGRect(x: 10, y: 20, width: 30, height: 40)
编译器将了解以下哪种方法调用:

public init(x: CGFloat, y: CGFloat, width: CGFloat, height: CGFloat)
public init(x: Double, y: Double, width: Double, height: Double)
public init(x: Int, y: Int, width: Int, height: Int)
我会打电话给3号

如果你写:

    let d = 10.0
    let r2 = CGRect(x: d, y: 20, width: 30, height: 40)
它会叫第二,因为d是双精度的


我的2美分。

这导致了这个错误:无法将“CGFloat,CGFloat,CGFloat,CGFloat”类型的值分配给“CGRect”@MatthijsOtterloo我修改了我的答案以提供正确的解决方案和解释。这导致了这个错误:无法分配“CGFloat,CGFloat,CGFloat”类型的值,CGFloat“aka”CGFloat,CGFloat,CGFloat,CGFloat”键入“CGRect”@MatthijsOtterloo我已经修改了我的答案以提供正确的解决方案和解释。plusLayer.frame=CGRECTMAKX,y,CGFloat27,CGFloat27有效吗?你确定这段代码适用于Swift 2吗?我无法编译它–您无法将元组分配给结构。使用初始化器CGRectx:x,y:y,width:27,height:27plusLayer.frame=CGRectMakex,y,CGFloat27,CGFloat27工作?您确定此代码适用于Swift 2吗?我无法编译它–您无法将元组分配给结构。使用初始化器CGRectx:x,y:y,宽度:27,高度:27