• Swift基础语法: 30


    前面我们讲了有关于脚本语法的基本认识以及使用, 现在让我们来看看Swift的其他东西:


    1.基类

    所谓的基类, 就是OC中的父类, 不继承任何类, 就叫做基类, 让我们来看看例子:

    class Vehicle {
        var currentSpeed = 0.0
        var description: String {
            return "traveling at (currentSpeed) miles per hour"
        }
        func makeNoise() {
    
        }
    }
    
    let someVehicle = Vehicle()
    println("someVehicle: (someVehicle.description)")
    // 打印出来的结果: someVehicle: traveling at 0.0 miles per hour

    PS: 这个类虽然是没有什么意义, 但它的的确确是一个基类, 在Swift中, 如果你没有在这个类名后面继承与什么什么类, 那么就会自动的变成基类.


    2.子类生成

    所谓的子类, 其实和OC中的子类一样的, 它是基于基类所新建的一个类, 这个类就叫做子类, 它拥有父类的所有特性, 同时它又可以有属于自己的特性, 下面让我们来看看例子:

    class Bicycle: Vehicle {
        var hasBasket = false
    }
    
    let bicycle = Bicycle()
    bicycle.hasBasket = true
    bicycle.currentSpeed = 15
    println("bicycle: (bicycle.description)")
    // 打印出来的结果: bicycle: traveling at 15.0 miles per hour

    PS: 上面的例子就是Vehicle类的子类, 它继承与Vehicle的所有特性, 可以调用Vehicle类里面的变量, 方法,等等, 同时它又有自己的属性.


    3.重写方法

    在子类中, 虽然拥有父类的所有特性, 但在实际开发中, 有一些特殊的情况, 父类的方法不能满足于子类的需求, 但我们又不想去更改父类的方法, 那么我们可以选在在子类里去重写父类的方法, 比如:

    class Car: Vehicle {
        var gear = 1
        override var description: String {
            return super.description + " in gear (gear)"
        }
    }
    
    let car = Car()
    car.currentSpeed = 25.0
    car.gear = 3
    println("Car: (car.description)")
    // 打印出来的结果: Car: traveling at 25.0 miles per hour in gear 3

    PS: 没错, 有些眼睛犀利的朋友就看到了, 在Car这个子类里, 有一个方法名和父类的方法名是一样的, 但在这个方法名前面, 加了一个override这个关键字, 这个就是Swift中的重写关键字.


    4.重写属性

    在Swift中, 既然能重写父类的方法, 那当然也是可以重写父类的属性了, 让我们来看看例子:

    class SpeedLimitedCar: Car {
        override var gear: Int {
            get {
                return super.gear
            }
            set {
                super.gear = 2
            }
        }
    }
    let limitedCar = SpeedLimitedCar()
    limitedCar.gear = 60
    
    println("SpeedLimitedCar: (limitedCar.gear)")
    // 打印出来的结果: SpeedLimitedCar: 2

    PS: 这里需要注意一点的就是, 必须通过get和set这种特性的方式来重写父类的属性.


    5.防止重写

    在上面的例子中, 如果我有某个类的属性或者方法不想被重写, 只要在基类定义的时候在前面加一个final关键字就可以防止被重写, 下面让我们来看看例子:

    class Car: Vehicle {
        final var gear = 0
        final override var description: String {
            return super.description + " in gear (gear)"
        }
    }
    
    class SpeedLimitedCar: Car {
        override var description: String {
            return "重写了"
        }
        override var gear: Int {
            get {
                return super.gear
            }
            set {
                super.gear = 2
            }
        }
    }
    // 报错: Var overrides a 'final' var

    报错


    好了, 这次我们就讲到这里, 下次我们继续~

  • 相关阅读:
    如何借助BM算法轻松理解KMP算法
    如何实现文本编辑器中的查找替换功能?——BF算法
    C++中求数组长度与memset的用法
    什么是素数/质数/合数
    深度和广度优先搜索:如何找出社交网络中的三度好友关系?
    如何存储微博、微信等社交网络中的好友关系?
    为什么说堆排序没有快速排序快?
    HTML5中标记与特殊属性
    margin外边距问题
    html热点区域
  • 原文地址:https://www.cnblogs.com/iOSCain/p/4529358.html
Copyright © 2020-2023  润新知