一 、类型的判断
1、is 的介绍
Swift 中类型的判断的关键词是 is 。is 操作用来判断某一个对象是否是某一个特定的类,它会返回一个bool类型的值。
2、 is的使用方法
1> is 的一般判断(Swift 系统也会自动判断)
// 类型的一般判断方法
let NetWStr = "NetWork小贱"
/**
判断NetWStr 是否是 “字符串”
*/
if NetWStr is String {
print("NetWStr->String 匹配成功")
}else{
print("NetWStr->String 匹配失败")
}
// 判断 Int 是否能匹配 String
let NetWInt = 110
if NetWInt is String {
print("NetWInt->String匹配成功")
}else{
print("NetWInt->String 匹配失败")
}
2> 系统不能为我们判断类型的处理
let Params:[Any] = ["NetWork小贱",120,["120",12],["As":"120"]]
/**
遍历数据获取其类型
*/
for item in 0..<Params.count {
let temp = Params[item]
if temp is String {
print("\(temp)"+"-- 字符串匹配成功")
}
if temp is Int {
print("\(temp)" + "-- 整数匹配成功")
}
if temp is Array<Any> {
print(temp)
print("-- 数组匹配成功")
}
if temp is Dictionary<String, Any> {
print(temp)
print("-- 字典匹配成功")
}
}
二、类型的转换
1> 同类型的对象转化 as
/**
类型转换
as : 同类型的 OC 类型和 Swift 类型的转化
*/
let NetWorkData = Data.init()
let NetWData = NetWorkData as NSData
print(NetWData)
let NetWorkStr = "Network小贱"
let kNetWStr = NetWorkStr as String
print(kNetWStr)
2> 类型的强制转换(as !),否则抛出异常
/**
类型的强制转化
as!操作符是类型转换的强制格式,优点在于代码简单,如果可以转换,则会返回转换了格式的对象,如果无法转换就会抛出运行时错误。因此除非百分之百确定可以转换,否则不应该使用as!来进行强制类型转换。
*/
class NetWClass:NSObject {
var name = "NetWClass强制转换成功"
}
/**
类型的转换 Any --> NetWClass
*/
let ParamClass:[Any] = [NetWClass.init()]
for item in ParamClass {
let temp = item as! NetWClass
print(temp.name)
}
3> 非强制的类型转换(as?),如果转换不成功返回nil
/**
as! 类型转换,在类型转换失败的时候返回 Nil。否则返回转换后的类型
*/
class NetWClassA:NSObject {
var name = "NetWClassA强制转换成功"
}
class NetWClassB:NSObject {
var name = "NetWClassB强制转换成功"
}
let ParamClassX:[Any] = [NetWClassA.init(),NetWClassB.init()]
for item in ParamClassX {
let temp = item as? NetWClassA
if temp == nil {
print(temp)
}else{
print((temp?.name)!)
}
let tempX = item as? NetWClassB
if tempX==nil {
print(tempX)
}else{
print((tempX?.name)!)
}
}