Swift 对象类型转换

Swift 中对象是可以转换的,因为面向对象就会涉及继承,子类,父类等等

有几点规则我们先说一下

子类对象可以直接转换为父类对象的

父类对象可以有条件的转换为子类对象,这个我们下边在讲

首先我们创建三个类  人 Homan  男人 Man  男孩 Boy

Man 继承 Homan

Boy 继承 Homan

那么,就可说  Man 是 Homan 的子类

Boy 是 Homan的子类

Homan  是 Man的父类

Homan 是 Boy的父类

class Homan{
    var name=""
    init(homanName:String){
        name=homanName
    }
    //自我介绍
    func Introduce(){
        println("I'm Homan My name is \(name)")
    }
}
class Man:Homan {
    var workName=""
    override func Introduce() {
        println("I'm Man  My name is \(name)  My workname is \(workName)")
    }
}
class Boy:Homan {
    var schoolName=""
    override func Introduce() {
        println("I'm Boy My My name is \(name)  schoolname is \(schoolName)")
    }

}

首先我们看 子类转为父类

        //1,子类对象可以直接转换成父类对象(向上转型,直接转)
        var h:Homan=Man(homanName: "张三")
        h.Introduce()

        var h1:Homan=Boy(homanName: "小马")
        h1.Introduce()

接下来 我们讲子类转为父类

        //2,父类对象转为子类对象 as!   as?

        //父类对象转换为子类对象 需要使用as!(如果当前对象是父类对象,但是他如果是子类对象转化过来的,那么可以转化回去
        var man1=h as! Man
        man1.workName="ios 开发"
        man1.Introduce()

        //如果要转化为子类对象,但是当前对象并不是这个子类对象转化过来的,那么会出现运行时错误:Could not cast value of type
//        var man2=h1 as! Man

        //如果我们需要将当前父类对象转为子类对象但是并不确定 当前对象是否为子类对象转化过来的,该如何处理? Swift为我们提供一个方法 as?
        if let a = h as? Man{
            a.workName="iOS 测试"
            a.Introduce()
        }else{
            println("非子类对象")
        }

        if let a = h1 as? Man{
            a.workName="iOS 测试"
            a.Introduce()
        }else{
            println("非子类对象")
        }

还有一种情况是 不知道当前对象是否为子类对象转为父类对象的

        //3 如何判断某一个对象是不是这个类的对象 可以 使用 对象 is 类 来判断

        //我们会发现判断子类对象是不是父类对象返回也是true
        println(h is Homan)
        println(h is Man)
        println(h is Boy)
        

好了 基本完成,有问题可以继续讨论

苹果开发群 :414319235  欢迎加入  欢迎讨论问题

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-25 13:46:33

Swift 对象类型转换的相关文章

Swift 对象内存模型探究(一)

MemoryLayout 基本使用方法 HandyJSON 是 Swift 处理 JSON 数据的开源库之一,类似 JOSNModel,它可以直接将 JSON 数据转化为类实例在代码中使用. 由于 Swift 是一种静态语言,没有 OC 那种灵活的 Runtime 机制,为了达到类似 JSONModel 的效果,HandyJSON 另辟蹊径,绕过对 Runtime 的依赖,直接操作实例的内存对实例属性进行赋值,从而得到一个完全初始化完成的实例. 本文将通过探究 Swift 对象内存模型机制,简单

swift对象存储

swift对象存储 简介 OpenStack Object Storage(Swift)是OpenStack开源云计算项目的子项目之一,被称为对象存储,提供了强大的扩展性.冗余和持久性.对象存储,用于永久类型的静态数据的长期存储. Swift 最初是由 Rackspace 公司开发的高可用分布式对象存储服务,并于 2010 年贡献给 OpenStack 开源社区作为其最初的核心子项目之一,为其 Nova 子项目提供虚机镜像存储服务.Swift 构筑在比较便宜的标准硬件存储基础设施之上,无需采用

openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 三

openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 一 openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 二 openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 三 openstack-r版(rocky)搭建基于centos7.4 的openstack swift对象存储服务 四 以下操作在控制节点执行control

Swift之类型转换

在你的代码中即使知道整数常量和变量是非负数也用Int类型来通用于所有的整数.在平常情况下使用默认的整数类型意味着整数常量和变量能及时的相互操作,并且能通过整数字面量值来匹配推断出的类型. 只有在当前任务的一些特定需求时才使用其它整数类型,因为来自外来的数据的大小是明确的,或者是因为性能,内存使用,或者其它必要的优化.在这些情况下用大小明确的类型用助于捕获意外的值溢出和被用于隐式文本所使用的原始值. 整数转换 对于每种数字类型的常量或变量所能存储的数字的范围是各不相同的.一个Int8的常量或者变量

Swift 对象方法

Swift 类的方法也分对象方法和类方法,我们先简单看一下对象方法. 我们分三类来分析 我们看一个例子,创建一个学生类 Student,他有四个属性 姓名 name,年龄 age,性别 sex,知识 knowledge 我们定义三个方法 学习 1,不带参数,只要学生调用了学习方法知识+1 2,带两个参数,第一个参数subject 表示学习的课程,第二个参数表示学习的课时 3,参数同2 但是我们给每个参数指定一个外部名 class Student{ var name="" var age

为什么 NSLog 不支持 Swift 对象(转)

https://segmentfault.com/a/1190000005668218 也就说: 1. 如果是 OC 的对象,重写 description 的 get 方法就可以了. 2. 如果不是 OC 对象,遵循协议  CustomDebugStringConvertible 就可以了. import Foundation print("Hello, World!") class Foo: CustomDebugStringConvertible { var debugDescri

Openstack O版 配置swift对象存储服务

环境如下图所示:IP:192.168.0.111 controllerIP:192.168.0.112 computeIP:192.168.0.113 object1IP:192.168.0.117 object2IP:192.168.0.118 cinder1.在控制节点上安装 swift服务[[email protected]er ~]# source admin-openrc创建swift用户[[email protected] ~]# openstack user create --do

swift中文文档- 类型转换

未翻译完 待续(英语烂,求斧正) Type Casting 类型转换 Type casting is a way to check the type of an instance, and/or to treat that instance as if it is a different superclass or subclass from somewhere else in its own class hierarchy. 类型转换是检测实例所属类型的一种方法,和/或 去对待实例好像它是一个

Java多态对象的类型转换和动态绑定

Java多态对象的类型转换这里所说的对象类型转换,是指存在继承关系的对象,不是任意类型的对象.当对不存在继承关系的对象进行强制类型转换时,java 运行时将抛出 java.lang.ClassCastException 异常. 在继承链中,我们将子类向父类转换称为"向上转型",将父类向子类转换称为"向下转型". 很多时候,我们会将变量定义为父类的类型,却引用子类的对象,这个过程就是向上转型.程序运行时通过动态绑定来实现对子类方法的调用,也就是多态性. 然而有些时候为