Подтвердить что ты не робот

Как преобразовать значение Int32 в CGFloat в swift?

Вот мой код. Я передаю два значения в CGRectMake(..) и получение и ошибку.

let width = CMVideoFormatDescriptionGetDimensions(device.activeFormat.formatDescription as CMVideoFormatDescriptionRef!).width
// return Int32 value

let height = CMVideoFormatDescriptionGetDimensions(device.activeFormat.formatDescription as CMVideoFormatDescriptionRef!).height
// return Int32 value

myLayer?.frame = CGRectMake(0, 0, width, height)
// returns error: '`Int32`' not convertible to `CGFloat`

Как преобразовать Int32 в CGFloat, чтобы не возвращать ошибку?

4b9b3361

Ответ 1

Для преобразования между численными типами данных создайте новый экземпляр целевого типа, передав исходное значение в качестве параметра. Итак, чтобы преобразовать Int32 в CGFloat:

let int: Int32 = 10
let cgfloat = CGFloat(int)

В вашем случае вы можете:

let width = CGFloat(CMVideoFormatDescriptionGetDimensions(device.activeFormat.formatDescription as CMVideoFormatDescriptionRef!).width)
let height = CGFloat(CMVideoFormatDescriptionGetDimensions(device.activeFormat.formatDescription as CMVideoFormatDescriptionRef!).height)

myLayer?.frame = CGRectMake(0, 0, width, height)

или

let width = CMVideoFormatDescriptionGetDimensions(device.activeFormat.formatDescription as CMVideoFormatDescriptionRef!).width
let height = CMVideoFormatDescriptionGetDimensions(device.activeFormat.formatDescription as CMVideoFormatDescriptionRef!).height

myLayer?.frame = CGRectMake(0, 0, CGFloat(width), CGFloat(height))

Обратите внимание, что в swift нет неявного или явного литья типов между числовыми типами, поэтому вам нужно использовать тот же шаблон для преобразования Int в Int32 или UInt и т.д.

Ответ 2

Просто явно преобразуйте width и height в CGFloat с помощью инициализатора CGFloat's:

myLayer?.frame = CGRectMake(0, 0, CGFloat(width), CGFloat(height))