class MyBasic { var name:String
init (name:String) { self.name = name } }
class MyFriend: MyBasic { var level = 9 }
class MySelf: MyBasic { var height = 9 }
var myArray = [ MyFriend(name: ”Hello”), MySelf(name: ”Kitty") ]
for elem in myArray { if elem is MyFriend { //判断elem是否是 MyFriend类型 let obj = elem as MyFriend //将obj视为elem向下转型为MyFriend println(“name: \(obj.name) level:\(obj.level)") continue }
if elem is MySelf { let obj = elem as MySelf println(“name: \(obj.name) height:\(obj.height)") continue } }
上面这段,是判断了类型之后转型,但是有些时候,我们需要把判断和转型放在一条语句中执行:
let obj = myArray[0] as? MySelf //obj变成了可选型,转型不成功为nil 这时,obj为nil,因为myArray第一个元素不是MySelf类型。
Any 和 AnyObject 的类型转换 swift 提供了两个可以代表不确定类型的特殊类型: AnyObject可以代表任何类的实例 Any可以代表任何类型(类型,不是实例),除了函数。
cocoa的一些api,会返回一个AnyObject类型的数组:AnyObject[] 因为Objective C中没有明确的类型的数组。
现在,将上面的myArray改一下定义: var myArray:AnyObject[] = [ //将数组定义为AnyObject类型 MyFriend(name: ”Hello”), MyFriend(name: ”Kitty")]
现在就可以这样写for了:for elem in myArray as MyFriend[] { //将数组myArray看作是 MyFriend类型的数组 println(“name \(elem.name) level:\(elem.level)")}
Any类型的就直接上官方例子了,没啥可说的:

实际上。。。也就是教学过程会这么写吧。。。项目中这么写就是脑抽:

嵌套类型 这个也没啥好说的,直接上官方例子:


使用:
