2014-08-29 8 views
1

Я хочу, чтобы инициировать экземпляр UITableView из CGRectMake функции, но когда я попытался инициировать его, используя константы вместо прямого назначения нового Int, такие как:не может ссылаться + с аргументом CGRect ошибки типа в Swift

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

Путь @Martin R делает хорошо работает, но позже я обнаружил, что нет никаких причин беспокоиться, чтобы использовать CGFloat() - вы можете просто использовать CGRect() вместо CGRectMake() в Swift, на котором вы можете указать аргумент как Int, а также Double или CGFloat всем x, y, width и height свойств в тех пор, пока все четыре свойства одного и того же типа. Кроме того, вы не можете опустить имя каждого свойства, которое вы можете использовать в случае CGRectMake(), но это проще, более гибко и считается инициализатором по умолчанию CGRect в Swift.

0

Вы должны сделать свой постоянный поплавок, добавив «.0" в конце, и» +0,0" в конце любого значения вы передаете как «120.0 ».

Размеры должны быть CGFloat вместо Int.

Это должно сработать.

+0

Это не так. В нем говорится «.» postfix является зарезервированным – NSNoob

3

Int не может быть преобразован в CGFloat с ... as CGFloat обозначение.

Вы должны построить CGFloat сек от Int с:

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

Спасибо. Но почему 'Int' не конвертируется в' CGFloat'? – Blaszard

+3

@Gardecolo: 'as' - это оператор типа« литье », используемый для downcasting, а не для преобразования между различными типами. –

+0

Ах, я забыл об этом, спасибо. – Blaszard

 Смежные вопросы

  • Нет связанных вопросов^_^