隐含解缠在阵营"Swiftris" Swift tutorial (step 5)我们被要求写习惯用法斯威夫特
var tick:(() ->())?
var tickLengthMillis = TickLengthLevelOne
var lastTick:NSDate?
override func update(currentTime: CFTimeInterval) {
if lastTick == nil {
return
}
var timePassed = lastTick!.timeIntervalSinceNow * -1000.0
if timePassed > tickLengthMillis {
lastTick = NSDate.date()
tick?()
}
}
无法的update
身体已经被写成
if let timePassed = lastTick?.timeIntervalSinceNow {
if timePassed * -1000.0 > tickLengthMillis {
lastTick = NSDate.date()
tick?()
}
}
具有同样的效果。
如果是这样,为什么不更紧凑,显然(对我来说),相当于
if lastTick?.timeIntervalSinceNow * -1000.0 > tickLengthMillis {
lastTick = NSDate.date()
tick?()
}
失败(与“可选类型的值双?不解开”)?
我不认为这是真的。如果'lastTick'是'nil','lastTick?.timeIntervalSinceNow'的计算结果为'nil',但省略* -1000.0'不会产生错误('>'工作)。所以问题是'*'操作,我想。 – orome 2014-10-02 17:48:25
是正确的,因为如果nil * -1000.0> tickLengthMillis'''',但'''nil * -1000.0''的值无法确定,请参阅[我的答案](http:/ /stackoverflow.com/a/26166511/2147244)以上详细信息 – 2014-10-02 18:08:20
@raxacoricofallapatorius是的,这是正确的,我的错误 - 但错误的来源仍然是一样的:'lastTick'是一个可选项。感谢您发现错误,我已经相应地更新了我的答案 – Antonio 2014-10-02 18:33:05