Невозможно вызвать + с аргументом ошибки типа CGRect в Swift

Я хочу инициировать экземпляр UITableView из функции CGRectMake, но когда я попытался инициировать его с помощью констант вместо прямого назначения нового Int, например:

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.


person Blaszard    schedule 29.08.2014    source источник


Ответы (3)


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

person Blaszard    schedule 29.09.2014

Int нельзя преобразовать в CGFloat с помощью нотации ... as CGFloat.

Вы должны построить CGFloats из Ints:

let frame = CGRectMake(20.0, CGFloat(HEIGHT_OF_STATUS_AND_NAVIGATION_BAR + 120), CGFloat(tableWidth), CGFloat(tableHeight))
person Martin R    schedule 29.08.2014
comment
Спасибо. Но почему Int нельзя конвертировать в CGFloat? - person Blaszard; 29.08.2014
comment
@Gardecolo: as - это оператор приведения типов, используемый для понижения, а не для преобразования между разными типами. - person Martin R; 29.08.2014

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

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

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

person Thiago Magalhaes    schedule 29.08.2014
comment
Это не так. Это говорит. постфикс зарезервирован - person NSNoob; 13.05.2015