web-dev-qa-db-fra.com

comment convertir la valeur Int32 en CGFloat en un rien de temps?

Voici mon code. Je passe deux valeurs dans CGRectMake(..) et j'obtiens et erreur.

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`

Comment puis-je convertir Int32 à CGFloat pour ne pas retourner d'erreur?

25
iosLearner

Pour convertir entre les types de données numériques, créez une nouvelle instance du type cible, en transmettant la valeur source comme paramètre. Donc, pour convertir un Int32 vers un CGFloat:

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

Dans votre cas, vous pouvez soit:

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)

ou:

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))

Notez qu'il n'y a pas de transtypage de type implicite ou explicite entre les types numériques dans Swift, vous devez donc utiliser le même modèle également pour convertir un Int en Int32 ou à UInt etc.

66
Antonio

Il suffit de convertir explicitement width et height en CGFloat en utilisant le CGFloat's initialiseur:

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