is as? as! as
一,is
class ABC {}
let anyObject: Any = ABC()
if anyObject is ABC {
print("anyObject is ABC Type")
}
// 输出 anyObject is ABC Type二,as? 和 as!
三,as
最后更新于
class ABC {}
let anyObject: Any = ABC()
if anyObject is ABC {
print("anyObject is ABC Type")
}
// 输出 anyObject is ABC Type最后更新于
class ABC {}
let anyObject: Any = ABC()
if let abc = anyObject as? ABC {
print("anyObject is ABC Type")
}
// 输出 anyObject is ABC Typeclass ABC {}
let anyObject: Any = ABC()
// 这里会映射失败,直接Crash,但是如果你使用as?,result会得到Optional对象值为nil。但是as!不会返回可选类型的值,直接会挂。
let result = anyObject as! Int// 基类
class ABC {}
// 子类
class DEF: ABC {
func foo() {
}
}
// 创建一个子类对象
let object = DEF()
// 使用as告诉IDE这个对象的类型是ABC,
// 但是实际运行时打印的时候,它还是DEF,所以就是
// as 没有改变对象的内存结构,只是编译前告诉IDE,把它当作ABC类型去处理。
// 转换完成后,IDE中认为是ABC类型,无法调用foo方法。
let result = object as ABC