Double 值无法转换为 Int64,因为它要么是无限的要么是 NaN
Posted
技术标签:
【中文标题】Double 值无法转换为 Int64,因为它要么是无限的要么是 NaN【英文标题】:Double value cannot be converted to Int64 because it is either infinite or NaN 【发布时间】:2017-06-01 12:48:51 【问题描述】:我是 swift 新手,我正在 swift 3.0 中开发一个项目,我有一个 UISlider 可以拖动。一旦我拖动它,我就会收到以下崩溃消息:“双值无法转换为 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")
【问题讨论】:
您的打印语句输出什么 - “持续时间...”?为什么不打印 sender.value、Float64(sender.value) 和 totalsecs 呢?一旦你可以看到所有的值,可能会很明显...... 持续时间为 nan 您是否查看了currentitem.duration nan
的 Google 点击次数?
【参考方案1】:
尝试按照错误信息进行操作...
“双值不能转换为 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)
设置...
而且...你说duration
是 NaN。
找出为什么 duration
是 NaN,你就有答案了。
【讨论】:
我得到了 val 和 duration 值 nan 是的...如果duration
是 NaN 并且您使用持续时间将值分配给 val
,那么 当然 @987654332 @ 将是 NaN。 “找出为什么 duration
是 NaN,你就有答案了。”以上是关于Double 值无法转换为 Int64,因为它要么是无限的要么是 NaN的主要内容,如果未能解决你的问题,请参考以下文章
收到致命错误:双精度值无法转换为 Int,因为它是无限的或 NaN