我剛剛構建了一個SpriteKit演示應用程序。 我下面(as!SKView?)和(as?SKView)之間的區別
if let view = self.view as! SKView? {
...
}
的代碼是什麼(如self.view!SKView?),這意味着在不? 爲什麼他們不寫這樣的代碼:
if let view = self.view as? SKView {
...
}
有什麼區別? 非常感謝!
我剛剛構建了一個SpriteKit演示應用程序。 我下面(as!SKView?)和(as?SKView)之間的區別
if let view = self.view as! SKView? {
...
}
的代碼是什麼(如self.view!SKView?),這意味着在不? 爲什麼他們不寫這樣的代碼:
if let view = self.view as? SKView {
...
}
有什麼區別? 非常感謝!
self.view
是力鑄於(又名Optional<SKView>
)。如果此投射失敗(當self.view
實際上不是)時,程序將崩潰以防止進入不一致狀態。
產生的然後展開安全並分配給view
如果不是nil
,否則,在執行else
情況下,如果有一個。
self.view
安全地轉換爲SKView
。這個表達式的結果是SKView
。它會有一個有效的值(如果演員是可能的話),或者如果演員不可能的話nil
。不像第一種情況,它不會崩潰。
產生的然後展開安全並分配給view
如果不是nil
,否則,在執行else
情況下,如果有一個。
if let view = self.view as? SKView { ... }
這意味着,如果視圖可以轉換爲SKView,那麼做,否則不要這樣做。這是安全的,因爲它不會使程序崩潰並且被推薦。這就是問號的含義。它可以鑄造成SKView嗎?
if let view = self.view as! SKView? { ... }
這真的不應該使用。你說這個視圖應該強制轉換爲一個可選的SKView,如果SKView可以解包,它將會起作用。就像其他用戶所說,它是重複性的,即使它不會給你一個錯誤也不應該使用。
第一種語法(*強制展開*可選的可選項)是一個矛盾,並且根本不應該使用。我希望編譯器在可選綁定中使用時發生錯誤。 – vadian
[在Swift中轉換爲泛型可選]的可能副本(http://stackoverflow.com/questions/32080420/casting-to-generic-optional-in-swift) –
@Eric你的問題得到了解答嗎? – Alexander