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