剛開始學習Swift,下載了他人寫的項目,用xcode打開後都會提示錯誤。將代碼中的一些as
修改成as!
就沒問題了。在網上找了下緣由,發現了這篇文章—— The as! Operator,翻譯以下:objective-c
在Swift 1.2之前,操做符as
根據表達式的類型能夠用來執行兩種不一樣的轉換:swift
1 as Float
).Swift 1.2 從概念上將Guaranteed conversion和Forced conversion分紅兩種不一樣的操做符。 Guaranteed conversion仍然用as
操做符,而Forced conversion則用as!
操做符執行。感嘆號!
代表這種轉換可能會失敗,這樣你看一眼就知道哪一種代碼會致使程序奔潰。xcode
下面用例子展現其區別:安全
class Animal {} class Dog: Animal {} let a: Animal = Dog() a as Dog // now raises the error: "'Animal is not convertible to 'Dog'; // ... did you mean to use 'as!' to force downcast?" a as! Dog // forced downcast is allowed let d = Dog() d as Animal // upcast succeeds
注意將表達式後綴符!
和?
與轉換符as!
和as?
作類比:app
class Animal {} class Cat: Animal {} class Dog: Animal { var name = "Spot" } let dog: Dog? = nil dog?.name // evaluates to nil dog!.name // triggers a runtime error let animal: Animal = Cat() animal as? Dog // evaluates to nil animal as! Dog // triggers a runtime error
記住Swift中這些操做符模式的最簡單方法是:!
表示「這可能有問題」,而?
表示「這可能爲空」。學習