0

我有以下两行代码要迁移到 Swift,但我有点卡住了。

CMTime trimmingTime = CMTimeMake(lround(videoAsset.naturalTimeScale / videoAsset.nominalFrameRate), videoAsset.naturalTimeScale);
CMTimeRange timeRange = CMTimeRangeMake(trimmingTime, CMTimeSubtract(videoAsset.timeRange.duration, trimmingTime));

将下面的行转换为开头时,出现以下错误。

var trimmingTime: CMTime
trimmingTime = CMTimeMake(value: lround(videoAsset.naturalTimeScale / videoAsset.nominalFrameRate), timescale: videoAsset.naturalTimeScale)

二元运算符“/”不能应用于“CMTimeScale”(又名“Int32”)和“Float”类型的操作数

我尝试了几种不同的方法,但似乎没有任何效果。

4

2 回答 2

3

您不能像其他语言一样快速地对不同类型的操作数进行数学运算。您需要手动进行类型转换。

在这里,您应该将videoAsset.naturalTimeScale(即CMTimeScaleCMTimeScale 类型Int32)转换为 Float 以使其工作。

Float(videoAsset.naturalTimeScale)

但是CMTimeMake的值键将接受值CMTimeValue类型值。所以像这样使用它:

trimmingTime = CMTimeMake(value: CMTimeValue(Float(videoAsset.naturalTimeScale) / videoAsset.nominalFrameRate), timescale: videoAsset.naturalTimeScale)

再次让您的代码更 Swifty 使用CMTime,而不是CMTimeMake

trimmingTime = CMTime(value: CMTimeValue(Float(videoAsset.naturalTimeScale) / videoAsset.nominalFrameRate), timescale: videoAsset.naturalTimeScale)
于 2018-10-10T09:23:14.837 回答
2

二元运算符“/”不能应用于“CMTimeScale”(又名“Int32”)和“Float”类型的操作数,因此您需要将 CMTimeScale 预测为 Float。

您需要转换CMTimeScaleFloat

trimmingTime = CMTimeMake(value: lround(Float(videoAsset.naturalTimeScale) / videoAsset.nominalFrameRate), timescale: videoAsset.naturalTimeScale)
于 2018-10-10T09:23:04.907 回答