2015-08-18 51 views
-2

在Swift中,我可以使用as?將類型向下轉換爲另一種類型。如果投射失敗,則返回nilas的用途是什麼?在Swift中?

如果我使用as!並且投射失敗,則會引發錯誤。

爲什麼我們有as?as!?爲什麼不只是像C#和其他語言as。如果投射失敗只是返回null,就是這樣!

+2

Swift對大多數其他語言的類型和類型轉換要求更嚴格。就像你說的那樣,「as?」如果可以的話會下降,如果沒有則返回零。 (它返回一個可選項。)「as!」語法被稱爲force-downcast操作符,如果失敗,將會拋出運行時異常。 –

+1

這是一個完全不同的問題。這個問題不要求as之間的區別?並作爲!它詢問爲什麼不僅「爲」以及爲什麼需要「as」?並作爲!」 –

+3

因爲有時你不知道測試是否會失敗(因此需要可選的'as?'),有時你知道它不會失敗(因此你不想返回一個可選項,所以你會使用'如!')。 – Rob

回答

1

爲了方便起見。

需要as?運算符來提供可能失敗的downcast。 as!運營商然後是一種簡寫,如(value as? Type)!

如果您只有as?,您可以不用as!就可以居住,但as!比上面輸入的代碼更方便。 Prior to Swift 1.2,as!as,這導致與另一使用as混淆。移至as!使其用途明確,並符合?和!用於可選項。

在Swift中,你不能「只返回null,就是這樣」,因爲默認情況下,值不支持nil或null值。您需要使用可選項來明確表示沒有價值的可能性,這是一種旨在提高安全性的語言選擇。有了可選的回報,您需要在某個點提取該值以使用它,因此需要as!或者!當你確定沮喪會成功。

+0

它只是我,還是'作爲'[不再像一個單詞!](https://en.wikipedia.org/wiki/Jamais_vu) –