Swift_学习笔记_类型转换

  • 类型转换是指任意两个对象之间相互转换。
  • 这些类型可以是通过集成的父子关系,也可以是协议的耦合关系,甚至可以是任意类型之间的转换。

1、子类的对象赋值为基类

// 原型类
class Entity{
    var name = ""
    init(entityName:String) {
        self.name = entityName
    }
    func showTag() {

    }
}
// 人物类
class Hero:Entity{
    var race = ""
    override func showTag() {
        print("我是一个英雄")
    }
}
// 怪物类
class Monster:Entity{
    var  level = 0
    override func showTag() {
        print("我要吃了你")
    }
}

var hero:Entity = Hero(entityName: "火女")
hero.showTag()

var monster:Entity = Monster(entityName: "远古野")
monster.showTag()
  • 这里面指定一个对象的类型为 Entity类型,它实际创建出来的对象是Hero类型。这里的用法就是:把子类的对象转化为父类的对象。
  • 对象调用方法,依旧调用该对象的方法。

2、类型检查

  • 判断某个对象是不是某个类的对象,可以使用is关键字。
  • 经过测试,is关键字可以检查某个对象是否是某个父类的对象。
hero is Hero // true
hero is Entity // true

hero is Monster // false

3、类型转换

var hero1  = hero as Hero
//  error: 'Entity' is not convertible to 'Hero'; did you mean to use 'as!' to force downcast?
  • 根据上述代码,可以发现父类不能转化为子类,可以使用as!进行类型的强制向下转换。
  • 同时,Swift也提供了另外一个关键字as?,此关键字表示可以进行类型转换,但不一定能够成功,如果不成功,则返回nil
var monster1 = hero as? Monster // 转换失败,返回nil

4、AnyAnyObject类型转换

  • Any类型可以表示任意类型,包括基本数据类型或者类的对象。
var arrayOne = Array<Any>()
arrayOne.append(1)
arrayOne.append(1.2)
arrayOne.append("hello")
for item in arrayOne {
    print(item)
}
/*
1
1.2
hello
*/
  • 如果将一个变量设置为Any类型,那么该变量可以接收任何类型的值。
var any:Any = 1
print(any)
any = "2"
print(any)
any = 3.01
print(any)
  • AnyObject表示任何对象,但不包括Int,Long,Float等类型。
  • AnyObject用法与Any用法类似。
var arrayOne = Array<AnyObject>()
arrayOne.append(hero)
arrayOne.append(monster)
// arrayOne.append("4444") // 报错 error: argument type 'String' does not conform to expected type 'AnyObject'
for item in arrayOne {
    print(item)
}
var any:AnyObject = monster
print(any)
any = hero
print(any)

// any = "3333"  // 这种情况将会报错,error: value of type 'String' does not conform to 'AnyObject' in assignment
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值