Swift中的as!操做符

剛開始學習Swift,下載了他人寫的項目,用xcode打開後都會提示錯誤。將代碼中的一些as修改成as!就沒問題了。在網上找了下緣由,發現了這篇文章—— The as! Operator,翻譯以下:objective-c

as! 操做符

在Swift 1.2之前,操做符as根據表達式的類型能夠用來執行兩種不一樣的轉換:swift

  • Guaranteed conversion: Swift編譯器保證一種類型的值轉換爲另一種類型。例如,向上轉換(從一種類型轉換爲其父類型)或者指定表達式的類型1 as Float).
  • Forced conversion: Swift編譯器不保證這種強制將一種類型轉換爲其餘類型的安全性,其可能致使運行時問題。例如,向下轉換(從一種類型轉換爲其子類型).

Swift 1.2 從概念上將Guaranteed conversionForced 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中這些操做符模式的最簡單方法是:!表示「這可能有問題」,而?表示「這可能爲空」。學習

相關文章
相關標籤/搜索