Ios Swift错误:可选类型的值';双倍?';未拆开
我是Swift的新手,这是什么错误:Ios Swift错误:可选类型的值';双倍?';未拆开,ios,iphone,xcode,swift,Ios,Iphone,Xcode,Swift,我是Swift的新手,这是什么错误: let lvt=self?.lastVibrationTime let delta=self!.deltaTime let sens=self!.shakeSensitivity let time:Double = CACurrentMediaTime() //error is on `lvt` and says : Error:(37, 27) value of optional type 'Double?' not unwrapped; did you
let lvt=self?.lastVibrationTime
let delta=self!.deltaTime
let sens=self!.shakeSensitivity
let time:Double = CACurrentMediaTime()
//error is on `lvt` and says : Error:(37, 27) value of optional type 'Double?' not unwrapped; did you mean to use '!' or '?'?
if time - lvt > delta && data.userAcceleration.x < sens {
println("firmly shaken!")
self?.vibrateMe()
}
让lvt=self?.lastVibrationTime
让delta=self!。三角洲
让sens=self!。震动敏感性
let time:Double=CACurrentMediaTime()
//error位于'lvt'上,表示:error:(37,27)可选类型'Double'的值未展开;你想用“!”吗还是“?”?
如果时间-lvt>delta&&data.userAcceleration.x
所有选项都需要打开包装。
所以lvt
应该变成lvt代码>
警告打开没有值的可选项将引发异常。因此,确保你的lvt不是零可能是个好主意
if (lvt != nil)
当您编写let lvt=self?.lastVibrationTime时
当您使用self?
时,您的lvt变量是可选的,您必须在使用它之前将其展开,您有许多解决方案来修复此错误:
1. let lvt = self?.lastVibrationTime ?? 5 // 5 is the default value, you can use the value you want
2. let lvt = self!.lastVibrationTime
3. You can unwrap the value before use it:
if let lvt = self?.lastVibrationTime {
// your code here...
}
这一行:
let lvt = self?.lastVibrationTime
您正在确认的self
是可选的。因此,如果它是nil
,那么lvt
将是nil;如果self
不是nil
,则您将获得最后一次振动时间。由于这种模糊性,lvt
不是Double
类型,而是可选的Double?
如果您确定self
不会为零,则可以强制将其展开:
let lvt = self!.lastVibrationTime // lvt is a Double
如果self
为零,则应用程序将在此崩溃
为了安全起见,可以使用可选绑定来检查值:
if let lvt = self?.lastVibrationTime {
// do the comparison here
}
这意味着您可能需要一个else
案例,如果您有一些代码要在nil的情况下执行。在if语句中,您可以尝试将lvt
更改为lvt代码>猜测“lastVibrationTime”声明为“可选”。这意味着它可能是零,所以您需要在使用前将其打开。@ztan它起作用了,但这意味着什么?@gagarwal var last振动时间:Double=0//它是可选的吗?不,但既然您使用“self”作为可选的,它不能是,那么请尝试在self之后删除“?and!”,您就可以了。为什么Int可以是可选的呢?原因很多。主要是因为以前从未设置过该值。在你的情况下,可能没有最后的振动时间。一切都可以选择。甚至选项也可以是可选的:-)self?.lastVibrationTime
和self!之间的区别是什么!。lastVibrationTime
这是swift语言的基础,当使用self?
时,您说只有当self
为非nil时才分配lvt变量,这就是为什么在您的示例中使用self时lvt是可选的如果你说你确信self不是零,你应该使用代码>仅当您确定变量永远不会为零时。