在Swift中,我可以使用as?
將類型向下轉換爲另一種類型。如果投射失敗,則返回nil
。as的用途是什麼?在Swift中?
如果我使用as!
並且投射失敗,則會引發錯誤。
爲什麼我們有as?
和as!
?爲什麼不只是像C#和其他語言as
。如果投射失敗只是返回null,就是這樣!
在Swift中,我可以使用as?
將類型向下轉換爲另一種類型。如果投射失敗,則返回nil
。as的用途是什麼?在Swift中?
如果我使用as!
並且投射失敗,則會引發錯誤。
爲什麼我們有as?
和as!
?爲什麼不只是像C#和其他語言as
。如果投射失敗只是返回null,就是這樣!
爲了方便起見。
需要as?
運算符來提供可能失敗的downcast。 as!
運營商然後是一種簡寫,如(value as? Type)!
。
如果您只有as?
,您可以不用as!
就可以居住,但as!
比上面輸入的代碼更方便。 Prior to Swift 1.2,as!
是as
,這導致與另一使用as
混淆。移至as!
使其用途明確,並符合?和!用於可選項。
在Swift中,你不能「只返回null,就是這樣」,因爲默認情況下,值不支持nil或null值。您需要使用可選項來明確表示沒有價值的可能性,這是一種旨在提高安全性的語言選擇。有了可選的回報,您需要在某個點提取該值以使用它,因此需要as!
或者!當你確定沮喪會成功。
它只是我,還是'作爲'[不再像一個單詞!](https://en.wikipedia.org/wiki/Jamais_vu) –
Swift對大多數其他語言的類型和類型轉換要求更嚴格。就像你說的那樣,「as?」如果可以的話會下降,如果沒有則返回零。 (它返回一個可選項。)「as!」語法被稱爲force-downcast操作符,如果失敗,將會拋出運行時異常。 –
這是一個完全不同的問題。這個問題不要求as之間的區別?並作爲!它詢問爲什麼不僅「爲」以及爲什麼需要「as」?並作爲!」 –
因爲有時你不知道測試是否會失敗(因此需要可選的'as?'),有時你知道它不會失敗(因此你不想返回一個可選項,所以你會使用'如!')。 – Rob