2014-08-29 46 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