I have the following 2 lines of code that I am moving to Swift but I am a little stuck.
CMTime trimmingTime = CMTimeMake(lround(videoAsset.naturalTimeScale / videoAsset.nominalFrameRate), videoAsset.naturalTimeScale);
CMTimeRange timeRange = CMTimeRangeMake(trimmingTime, CMTimeSubtract(videoAsset.timeRange.duration, trimmingTime));
When converting the below line to begin with I get the following error.
var trimmingTime: CMTime
trimmingTime = CMTimeMake(value: lround(videoAsset.naturalTimeScale / videoAsset.nominalFrameRate), timescale: videoAsset.naturalTimeScale)
Binary operator '/' cannot be applied to operands of type 'CMTimeScale' (aka 'Int32') and 'Float'
I have tried a few different approaches but nothing seems to work.
You can not simply perform mathematically operation with different type of operands in swift like other languages. You need to type-cast manually.
Here you should cast videoAsset.naturalTimeScale
( which is CMTimeScale
and CMTimeScale is of type Int32
) to Float to get it work.
Float(videoAsset.naturalTimeScale)
But CMTimeMake
's value key will accept value CMTimeValue
type value. So use it like:
trimmingTime = CMTimeMake(value: CMTimeValue(Float(videoAsset.naturalTimeScale) / videoAsset.nominalFrameRate), timescale: videoAsset.naturalTimeScale)
Again to make you code more Swifty use CMTime
rather CMTimeMake
as:
trimmingTime = CMTime(value: CMTimeValue(Float(videoAsset.naturalTimeScale) / videoAsset.nominalFrameRate), timescale: videoAsset.naturalTimeScale)