1、可选类型
可选类型表示一个变量可能有值,也可能没有值(nil)。
声明的方式是 数据类型+问号
要使用一个可选类型的变量时,要在后面加感叹号 “!”
//swift可选类型说明 var islog:Int? //声明一个可选类型,默认值为nil if islog == nil{ print("你有多高?") }else{ print("你有(islog!)高。") } islog = 22 //给可选类型赋值
2、类型判断 is 与类型转换 as
//基类,动物 class Animal{ } //狗类 class Dog: Animal { } //猫类 class Cat: Animal { }
2.1 使用is 来做类型的检查(is也可以用来检查某个类是否遵循了某个协议)
let dog = Dog() let cat = Cat() var arr = [dog,cat] for animal in arr { if animal is Dog { print("这是个狗") }else if animal is Cat{ print("这个是猫") } }
2.2 用as来做类型的转换(如果不确定类型转换能否成功,可以在as后面加问号“?”)
let dog = Dog()
let cat = Cat()
var arr = [dog,cat]
for animal in arr { if let m = animal as? Dog { print("这个是狗") }else if let w = animal as? Cat{ print("这个是猫") } }
3、AnyObject与Any的区别
3.1 AnyObject:代表任何class类型的对象实例
class Dog{ } class Cat{ } let dog = Dog() let cat = Cat() var animals:[AnyObject] = [dog,cat] for animal in animals { if let m = animal as? Dog { print("这是个狗") }else if let w = animal as? Cat{ print("这是个猫") } }
3.2 Any:范围更广,代表处函数外任何类型的实例
class Dog{ } class Cat{ } var arrs:[Any] = [Any]() arrs.append(1) arrs.append("hero11223.com") arrs.append(Dog()) arrs.append(Cat()) for any in arrs{ switch any { case let any as Int: print("这是个Int类型") case let any as String: print("这是个String类型") case let any as Dog: print("这是个狗类型") case let any as Cat: print("这是个猫类型") default: print("这是个是猫类型") } }