我是斯威夫特的新手,我正在斯威夫特3.0中的一个项目中工作,我有一个UISlider来拖动。一旦我拖动它,就会出现以下崩溃:“Double value不能转换为Int64,因为它要么是无限的,要么是NaN”。我的代码如下。我该如何克服这个错误??. 崩溃的行是“let seekTime=CMTime(value:Int64(val),timescale:1)”。。。
@IBAction func sliderValueChanged(_ sender: UISlider) {
if let duration = player?.currentItem?.duration {
let totalsecs = CMTimeGetSeconds(duration)
print("Durtion :",totalsecs)
let val = Float64(sender.value) * totalsecs
let totalduration = CMTimeGetSeconds(duration) as Float64
if(val != totalduration){
let seekTime = CMTime(value: Int64(val), timescale: 1)
player?.seek(to: seekTime, completionHandler: { (completedSeek) in
})
}else{
print("Slider dragged error")
}
}
}
最佳答案
尝试跟踪错误消息。。。
“Double value不能转换为Int64,因为它要么是无穷大要么是NaN”-你说它在let seekTime = CMTime(value: Int64(val), timescale: 1)
行上。。。
所以。。。因为这条线使用的是Int64(val)
问题很明显:val
要么是无穷大要么是NaN。
所以。。。val
被设置为let val = Float64(sender.value) * totalsecs
,而totalsecs
由持续时间设置。。。
还有。。。你说let totalsecs = CMTimeGetSeconds(duration)
是NaN。
找出为什么duration
是NaN,你就有了答案。
关于ios - double 值不能转换为Int64,因为它是无穷大或NaN,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44308016/