Swift系列16-类型转换

类型转换

类型转换可以判断实例的类型,或者在该实例层次中父类或子类的实例.
Swift中转换实现是 is 和 as 两个关键字.

类型检查 is

is检查一个实例的类型,返回true或false

1
2
3
4
5
6
7
8
9
let ar1 = ["1","2"]
if ar1 is Array<Any> {
print("arr1是一个数组")
}

let s1 = "s1"
if s1 is String {
print("s1是一个字符串实例")
}

向下的类型转换 as

as是把某值转换成另外一种类型.
当你确定会转换成功时,使用 as 或 as! 来展开;
当不确定有值时,使用 as? 可选来进行转换,也就是转换失败时,可以返回nil.

1
2
3
4
5
6
let ar2 = ar1 as Array<Any>
print("ar1作为数组展开 并且赋值给ar2 \(ar2)")

var g1:String?
let s2 = g1 as? Any
let s3 = s1 as! String

Any和AnyObject的类型转换

这两种是Swift提供的不确定的类型
AnyObject表示任何实例(对象)
Any表示任何类型,包括函数类型

当你确切的需要使用他们的功能和行为时再使用Any和AnyObject.
在写代码时,明确类型表达总是要好些.

样例:

1
2
3
4
5
6
7
//当数组是Any类型时,可以添加任何类型
var arr3 = [Any]()
arr3.append("212")
arr3.append(123)
arr3.append(32.22)
arr3.append(UILabel())
print(arr3)

The End