无法调用+;使用Swift中CGRect error类型的参数

无法调用+;使用Swift中CGRect error类型的参数,swift,xcode6,cgrect,cgrectmake,Swift,Xcode6,Cgrect,Cgrectmake,我想从CGRectMake函数启动UITableView的实例,但当我尝试使用常量而不是直接分配新的Int时,例如: UITableView(frame: CGRectMake(20, HEIGHT_OF_STATUS_AND_NAVIGATION_BAR + 120, tableWidth, tableHeight) ,然后我得到一个错误:Int不能转换为CGFloat 因此,我将其更改为以下代码: UITableView(frame: CGRectMake(20, (HEIGHT_OF_S

我想从
CGRectMake
函数启动
UITableView
的实例,但当我尝试使用常量而不是直接分配新的
Int
时,例如:

UITableView(frame: CGRectMake(20, HEIGHT_OF_STATUS_AND_NAVIGATION_BAR + 120, tableWidth, tableHeight)
,然后我得到一个错误:
Int不能转换为CGFloat

因此,我将其更改为以下代码:

UITableView(frame: CGRectMake(20, (HEIGHT_OF_STATUS_AND_NAVIGATION_BAR + 120) as CGFloat, tableWidth as CGFloat, tableHeight as CGFloat)) // `tableWidth` and `tableHeight` are both of type `Int`.
,然后我得到一个错误:
无法使用CGRect类型的参数调用+

当然,我可以通过分配
Int
来启动它,比如
CGRectMake(20+300+12,44+120300480)
。但我想用常量和变量

那么这个错误意味着什么呢?我怎样才能修好它


我使用的是Xcode 6 beta 6。

您应该在常数的末尾加上“.0”,并在传递的任何值(如“120.0”)的末尾加上“.0”,从而使常数成为浮点值

大小应为CGFloat而不是Int


这应该是可行的。

你应该在常数的末尾加上“.0”,在传递的任何值的末尾加上“.0”,比如“120.0”,从而使常数成为一个浮点数

大小应为CGFloat而不是Int


这应该行。

一个
Int
不能用
转换成
CGFloat
。。。作为CGFloat
符号

您必须从
Int
s中构造
CGFloat
s:

let frame = CGRectMake(20.0, CGFloat(HEIGHT_OF_STATUS_AND_NAVIGATION_BAR + 120), CGFloat(tableWidth), CGFloat(tableHeight))

不能使用
Int
转换为
CGFloat
。。。作为CGFloat
符号

您必须从
Int
s中构造
CGFloat
s:

let frame = CGRectMake(20.0, CGFloat(HEIGHT_OF_STATUS_AND_NAVIGATION_BAR + 120), CGFloat(tableWidth), CGFloat(tableHeight))

@Martin R的方法确实很有效,但后来我发现没有理由费心使用
CGFloat()
——你可以使用
CGRect()
而不是在Swift中使用
CGRectMake()
,在Swift中,你可以将参数指定为
Int
以及
Double
CGFloat
,用于所有
x
y
width
height
属性,只要这四个属性的类型相同。此外,在使用
CGRectMake()
的情况下,不能省略每个属性的名称,但这更简单、更灵活,并且被认为是Swift中默认的
CGRect
初始值设定项。

使用@Martin R的方式效果很好,但后来我发现没有理由麻烦使用
cfloat()
-您可以在Swift中使用
CGRect()
而不是
CGRectMake()
,在Swift中,您可以将参数指定为
Int
,以及
Double
CGFloat
,用于所有
x
y
宽度
,和
height
属性,只要这四个属性的类型相同。此外,在使用
CGRectMake()
的情况下,您不能省略每个属性的名称,但这更简单、更灵活,并且被认为是Swift中默认的
CGRect
初始值设定项。

谢谢。但是为什么
Int
不能转换为
CGFloat
?@Gardecolo:
因为
是用于向下转换的“类型转换操作符”,而不是用于不同类型之间的转换。谢谢。但是为什么
Int
不能转换为
CGFloat
?@Gardecolo:
因为
是用于向下转换的“类型转换操作符”,而不是用于不同类型之间的转换。它不能。上面写着“postfix是一个reservedIt不是。上面写着“.”后缀是保留的