2014-11-05 21 views
-1

我在Xcode 6.1中遇到了我的flappy bird項目的編碼錯誤。Swift中的Flappy Bird編碼錯誤

的代碼是讓鳥的旋轉,並讀:dy下發生

bird.zRotation = self.acotarMinMax(-1, max: 0.3, valor: bird.physicsBody?.velocity.dy * (bird.physicsBody?.velocity.dy < 0 ? 0.003 : 0.001)) 

錯誤,它讀取:

value of optional type 'CGFloat?' not unwrapped; did you mean to use '!' or '?'? 

我怎樣才能糾正錯誤,或者是有另一種方法來產生旋轉?

我是Swift的初學者,所以我很難弄清楚這是一個語法問題還是與更新版本有關。

我從一個在線教程中獲得了代碼,它在視頻中工作。

回答

0

閱讀上的雨燕Optional類:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html

如此看來,dy是一個可選的值,這意味着它要麼有一個值或沒有,但你不知道,直到你看看它(像Schroedinger的貓)。所以,如果你需要這個值,你知道它不會是nil,你可以通過編寫bird.physicsBody?.velocity.dy!來打開它,它會查看「盒子」並取出該值,但如果裏面什麼都沒有,就會崩潰。如果你寫dy?它會看着盒子,但是如果盒子是空的,就忽略它。

更多可選鏈接(這是你做什麼)位置:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/OptionalChaining.html

+0

嗨塞巴斯蒂安,感謝您的回覆! – Harry 2014-11-05 09:20:06

+0

隨意投票或標記爲正確的答案,如果這對你有幫助。 :-) – 2014-11-05 09:34:26

0

於是我就想通了,我的錯誤。

正如塞巴斯蒂安正確指出的那樣,這是與可選鏈接。

奏效的代碼是:

bird.zRotation = self.acotarMinMax(-1, max: 1, valor: bird.physicsBody!.velocity.dy * (bird.physicsBody!.velocity.dy < 0 ? 0.002 : 0.002)) 

我用 '!'強制對物理體的價值。這種工作原理的精確機制對我來說依然模糊不清。但我的猜測是用新版本的修正方法。