2014-08-29 49 views
1

我想从CGRectMake功能发起的UITableView一个实例,但是当我试图使用常量来启动它,而不是直接分配新Int,如:不能与类型的CGRect错误的参数调用+斯威夫特

UITableView(frame: CGRectMake(20, HEIGHT_OF_STATUS_AND_NAVIGATION_BAR + 120, tableWidth, tableHeight) 

,然后我得到一个错误:Int is not convertible to 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`. 

,然后我得到了一个错误:Cannot invoke + with an argument of type CGRect

当然,我可以通过指定Int来启动它,例如CGRectMake(20 + 300 + 12, 44 + 120, 300, 480)。但我想使用常量和变量。

那么错误是什么意思?我该如何解决它?

我使用的Xcode 6测试版6.

回答

6

的方式@马丁 - [R确实效果很好,但后来我发现,没有理由刻意去使用CGFloat() - 你可以只使用CGRect()代替CGRectMake()斯威夫特,可以在其上,只要所有的四个属性是相同类型的参数指定为Int以及DoubleCGFloat所有xywidthheight性能。另外,在CGRectMake()的情况下,您不能忽略每个属性的名称,但这更容易,更灵活,并且被认为是Swift中的默认初始值设定项CGRect

0

你应该在它的末尾添加“.0" 让你不断的浮动,而” .0" 你传似“120.0任意值结束”。

尺寸应该是CGFloat而不是Int。

这应该工作。

+0

它没有。它说 ”。”后缀是一个保留 – NSNoob 2015-05-13 05:39:33

3

无法使用... as CGFloat表示法将Int转换为CGFloat

你必须从Int小号构建CGFloat S:

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

谢谢。但为什么'Int'不能转换为'CGFloat'? – Blaszard 2014-08-29 14:37:04

+3

@Gardecolo:'as'是用于向下转换的“类型转换操作符”,而不是用于不同类型之间的转换。 – 2014-08-29 14:49:02

+0

啊,我忘了,谢谢。 – Blaszard 2014-08-29 16:48:27