swift学习笔记之继承

来源:互联网 发布:java xbootclasspath 编辑:程序博客网 时间:2024/03/29 07:53
//继承1防止代码冗余2扩展功能//1继承的定义//2继承属性//3子类不仅可以继承父类的属性,还可以继承在属性中的添加的属性监视器class StepCounter {    var totalSteps:Int=0 {  //千万前面不能加lazy        willSet(newTotalSteps) {            print("新的值:\(newTotalSteps)")        }        didSet(old) {            if (totalSteps > old) {                print("与原来比增减了\(totalSteps - old)个值")            }        }    }}class stepCounter:StepCounter {}let counter=stepCounter()counter.totalSteps=10counter.totalSteps=100//4下标脚本的继承class Sorce {    var english:Int=130    var chinese:Int=50    var math:Int=90    subscript(index:Int)->Int {        get {            switch index {            case 0:                return english            case 1:                return chinese            case 2:                return math            default:                return 0            }        }    }}class childSorce: Sorce{}let myscore=childSorce()print(myscore[0])print(myscore[1])//5方法的继承//6继承的特点 在swift 中1>只支持单继承, 但一个父类可以多个子类,成树型结构2>不可以删除父类的属性//7重写//class NewClass {    var value:Int {// ~~1计算属性    return 100    }    class var classValue:Int { //~~~2重写类型属性     return 200    }}class NewClass1: NewClass {    override var value:Int {    return 333    }    override class var classValue:Int {    return 666    }}let cls = NewClass1()print(cls.value)print(NewClass1.classValue)// ~~~~3添加属性监视器class Car {    var speed:Double=0.00}class AutomicCar: Car {    var gear = 1    override var speed:Double {        didSet {        gear = Int(speed)            print(gear)        }    }}let automic = AutomicCar()automic.speed=34.00automic.speed=6886.00// ~~~~~4重写下标脚本class childSorce111: Sorce{    var value=0    override subscript(index:Int)->Int {    let count = index-value        return count    }}//~~~~~5重写方法//重写的注意事项//@1不可以省略override//@方法相同才能重写 ,父类没有的,怎么重写//8访问父类的成员//  1>访问属性 super.属性名//  2>访问下标脚本 suer[index]//  3>访问方法 super.方法名(参数名)//  4>访问类型属性//9防止重写// 将所有的属性,下标脚本,方法,类型属性 前面加一个 final (最终) 就可以达到防止子类重写了//10类型检查//类型检查是一种检查类实例的方式//  1> 类型检查 is //   用法 实例 is 子类型//       @1,不能总是true//       @2 实例是特定的子类型class ClassA {}class ClassA1:ClassA {    var movie:String="hello"}class ClassA2:ClassA {    var movie:String="hello"}class ClassA3:ClassA {    var movie:String="hello"}class ClassA4:ClassA {    var movie:String="hello"}class ClassB:ClassA {    var movie:String="hello"}class ClassC {}let b = ClassB()if b is ClassB { //总是truseprint("true")}else {print("false")}let a = ClassA()if a is ClassC {  //ClassC是基类    print("true")}else {    print("false")}//  2  as//开发者希望程序在运行期间进行类型转换 ,这时就需要强制转化as 或者可选的类型检查符 as?// 实例 as 类型// >1强制类型的转换let bb=ClassB()let clsbb = bb as ClassBprint("clsbb.movie==\(clsbb.movie)")//注意 @1相同类型的实例:在一个要检查类型的数组只可以存相同的类型////let library = [ClassB(),ClassB(),ClassB(),ClassC()]////for item in library {//let cls = item as  ClassB//    print(cls)//}//    @2不可以在条件语句使用//  >2可选类型的转换 as?//  当不确定转换是否可以成功的时候,可以使用as?//AnyObject 和Any的检查//对于一些类型不明确的类型,swift 提供了两种类型别名来检查,分别是AnyObject 和Any//Any比AnyObject范围更广,除了方法类型let library1 = [ClassA1(),ClassA2(),ClassA3(),ClassA4()]for item in library1 {let cls = item as  ClassA    print(cls)}for item:AnyObject in library1 {    let cls = item as! ClassA    print(cls)}
0 0
原创粉丝点击