溯造型

可以使用型別轉換運算子 as?as! 將變數下載到子型別

as? 運算子嘗試轉換為子型別。
它可能會失敗,因此它返回一個可選項。

let value: Any = "John"

let name = value as? String
print(name) // prints Optional("John")

let age = value as? Double
print(age) // prints nil

as! 運算子迫使型別轉換。
它不返回可選項,但如果轉換失敗則會崩潰。

let value: Any = "Paul"

let name = value as! String
print(name) // prints "Paul"

let age = value as! Double // crash: "Could not cast value…"

通常使用帶有條件展開的型別轉換運算子:

let value: Any = "George"

if let name = value as? String {
    print(name) // prints "George"
}

if let age = value as? Double {
    print(age) // Not executed
}