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