该代码用于播客应用。
import AVKit
extension CMTime {
func toDisplayString() -> String {
let totalSeconds = Int(CMTimeGetSeconds(self))
let seconds = totalSeconds % 60
let minutes = totalSeconds / 60
let timeFormatString = String(format: "%02d:%02d", minutes, seconds)
return timeFormatString
}
}
选择要播放的播客时失败...导致播放音频,但应用程序冻结直到重新启动。
编辑:错误发生在第let totalSeconds = Int(CMTimeGetSeconds(self))
行
答案 0 :(得分:2)
来自CMTimeGetSeconds
documentation:
如果CMTime无效或不确定,则返回NaN。如果CMTime 是无限的,则返回+/-无限。
当CMTimeGetSeconds
返回NaN或无穷大时,将返回值强制转换为Int
将引发您所看到的致命错误。
您可以先检查该值,然后在无效数字的情况下返回某种默认值。
func toDisplayString() -> String {
let rawSeconds = CMTimeGetSeconds(self)
guard !(rawSeconds.isNaN || rawSeconds.isInfinite) else {
return "--" // or some other default string
}
let totalSeconds = Int(rawSeconds)
let seconds = totalSeconds % 60
let minutes = totalSeconds / 60
let timeFormatString = String(format: "%02d:%02d", minutes, seconds)
return timeFormatString
}
答案 1 :(得分:1)
以下代码应该可以工作...基本上是这样,因为CMTimeGetSeconds(self)
返回的值超出了Int
的限制。
func toDisplayString() -> String {
let totalSeconds:TimeInterval = TimeInterval(CMTimeGetSeconds(self))
let seconds:TimeInterval = totalSeconds.truncatingRemainder(dividingBy: 60)
let minutes:TimeInterval = totalSeconds / 60
let timeFormatString = String(format: "%02d:%02d", minutes, seconds)
return timeFormatString
}