1.以下面代碼為情境代碼
class Shape{
}
class Circle:Shape{
}
class Rectangle:Shape{
}
var shape = Shape()
var circle = Circle()
var rect = Rectangle()
var array = Array<Any>()
array.append(circle)
array.append(shape)
array.append(rect)
array.append("aaaa")
array.append({return "aaaaa"})
2.is 用來判斷對象是否屬于某個類或者其子類,相當(dāng)于OC中的isKindOf方法
for item in array{
if item is Rectangle{
print("Rectangle:\(item)")
}else if item is Circle{
print("Circle:\(item)")
}
}
3.as as? as! 轉(zhuǎn)換
- as? 轉(zhuǎn)換成功之后是一個optional類型的值,轉(zhuǎn)換失敗為nil
let s1 = shape as? Circle
s1.dynamicType
- as! 轉(zhuǎn)換成功后是原類型不是目標(biāo)類型赦肋,轉(zhuǎn)換失敗報(bào)錯
let s2 = array.first as! Shape
s2.dynamicType //Circle.Type
//let s3 = array.first as! Rectangle //報(bào)錯
- as 當(dāng)編譯器也知道一定能轉(zhuǎn)成功的時(shí)候可以用as
//方式一
let s4 = shape as Shape
s4.dynamicType
//方式二
for item in array{
switch item {
case is Circle:
print("circle")
case is Rectangle:
print("rectangle")
case let s3 as Shape:
print(s3)
default:
break
}
}