写在前面:1,类型转换的两种方式
2,as!和as?的用法
3,类型判断中 is和===的用法
类型转换方式一,利用类型的构造器进行转换
let str = ""
var i = Int(str)
if(i == nil){
print("变量i为nil不能进行运算")
}else{
//由于变量i是一个可为空的变量,因此需要强制解封
let rs = i! +
print("变量i进行运算后的结果为\(rs)")
}
类型转换方式二,使用as?和as!进行转换
class A {
func am(){
print("am method")
}
}
class B: A {
func bm() {
print("bm method")
}
}
class C { } let ins: A = B()
let insb1 = ins as? B
let insb2 = ins as! B //使用as?进行转换时,若转换失败则会返回nil
if insb1 == nil {
print("change failed..\(insb1)")
}else{
print("change success")
insb1?.am()
}
注意:使用as?进行转换时,若转换失败则会返回nil
class A {
func am(){
print("am method")
}
}
class B: A {
func bm() {
print("bm method")
}
}
class C { } let ins: A = B()
let insb1 = ins as? B
let insb2 = ins as! B if insb2 == nil {
//这个分支将永远不会被执行
print("change failed..\(insb2)")
}else{
print("change success")
insb2.am()
}
注意:使用as!进行转换时,要么转换成功,若失败程序将会产生异常
类型判断:is
//判断的是两个对象的类型是否一致,因此下面代码if条件满足
if ins is B {
print("is b")
}
类型判断:===
//判断的是两个对象所引用的内存地址是否相同,因此下面代码无输出
let ins3 = B()
let ins4 = B()
let ins5 = ins3
if ins3 === ins4 {
print("true...")
}