swift 笔记 (十七) —— 类型转换、嵌套类型

类型转换
这其实是多态。。。
swift提供了 is 和 as 两个操作符,用以检测值的类型或者转换它的类型。

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类型的就直接上官方例子了,没啥可说的:



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


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





使用:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值