1. is类型转换
用来判断该对象的类型能否被兼容,返回Bool值。
let str = NSString()
let b1 = str is NSString //b1 = true
let b2 = str is NSObject //b2 = true
let b3 = str is NSData //b3 = false
2. as类型转化
Swift中类型要求非常严格,当一个对象被转成同种类型(如:字符串的String和NString也算)或一个泛指类型(即父类型)时,直接用as进行转换即可
let str = String()
let str1 = str as NSString
//转换成父类型
let str2 = str as NSObject
let str3 = str as AnyObject //AnyObject可以代表任何class类型的实例
let str4 = str as Any //Any可以表示任何类型,包括方法类型(function types)
//个人觉得Any比AnyObject好用
当要从父类型转换成其子类型时,需要增加判断,要用as?、as! 。as?表示可不可以转换成功都不会抛出异常;as!则表示一定可以转换,当转换失败时则抛出异常。
//确定的情况下用!
let str5 = str2 as! String //str2类型为NSObject
let str6 = str3 as! String
let str7 = str4 as! String
//不确定时改为?
let str5 = str2 as? String
let str6 = str3 as? String
let str7 = str4 as? String
通常情况下系统都会提示我们加。加?得出的类型打印或显示出来时会多个Optional(),要去掉它时,在最后一次类型转换时加!即可。
网友评论