web-dev-qa-db-ja.com

迅速にInt32値をCGFloatに変換する方法は?

ここに私のコード。 2つの値を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`

エラーを返さないようにInt32CGFloatに変換するにはどうすればよいですか?

25
iosLearner

数値データ型間で変換するには、ソース値をパラメーターとして渡して、ターゲット型の新しいインスタンスを作成します。 Int32CGFloatに変換するには:

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の数値型間で暗黙的または明示的な型キャストはないため、IntInt32UIntなどに変換する際にも同じパターンを使用する必要があります。

66
Antonio

widthheightCGFloatに明示的に変換するには、CGFloat's初期化子:

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