溯造型

可以使用类型转换运算符 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
}