在Swift中处理涉及Int64和Int32的操作的正确方法是什么?例如,以下失败,“二进制运算符'/'不能应用于'Int32'和'Int64'类型的操作数”:
let i64 : Int64 = 1
let i32 : Int32 = 1
let val = i32 / i64
这里的简单方案有效:
let i64 : Int64 = 1
let i32 : Int32 = 1
let val = Int64(i32) / i64
现在我的“真实世界”案例失败了,“无法使用类型为'(Int32)''的参数列表调用类型'Int64'的初始值设定项”:
let timedMetadataGroup : AVMutableTimedMetadataGroup
// timedMetadataGroup is initialised with values from another function
let startSecs = timedMetadataGroup.timeRange.start.value.value / Int64(timedMetadataGroup.timeRange.start.timescale.value)
纯情况与上述情况有何不同?我该如何解决这个问题?是否有多种类型的Int32或Int64?
答案 0 :(得分:1)
您正在访问
timedMetadataGroup.timeRange.start.timescale.value
但timescale
的类型为CMTimeScale
,它是Int32
的别名。所以我认为你应该停下来进行时间刻度并删除.value
部分。
let startSecs = timedMetadataGroup.timeRange.start.value / Int64(timedMetadataGroup.timeRange.start.timescale)
答案 1 :(得分:0)
Swift不允许使用不同类型的值进行数学运算。