美文网首页
6.类与结构体

6.类与结构体

作者: LucXion | 来源:发表于2020-06-08 17:34 被阅读0次

    结构体是功能仅逊于类的数据结构,其也可以描述拥有某些属性和行为的事物,只是它的实现机制和类有着本质的区别,应用场景也有所不同。
    Swift语言中的数据类型分为值类型和引用类型。结构体、枚举以及前面读者接触到的除类以外的所有数据类型都属于值类型。只有类是引用类型的。值类型数据和引用类型数据最大的区别在于当进行数据传递时,值类型总是被复制,而引用类型不会被复制,引用类型是通过引用计数来管理其生命周期的。关于引用计数与内存管理,后面章节会专门介绍。读者在这里需要注意,如果值类型有数据传递,原来的实例会被复制一份,修改新的实例并不能修改原始的实例。
    类有继承关系,结构体没有
    final关键字用于修饰某些终极的属性、方法或者类
    值类型进行比较操作,应使用等于运算符“==”;对引用类型进行比较操作,应使用等同运算符“===”,
    结构体

    struct Car {
        var name:String
        var oil:Double
        var price:Double
        
        mutating func addOil(_ parama:Double) { // mutating关键字可以在函数内操作属性
            oil += 10
        }
        mutating func drive(){
            oil -= 1;
        }
    }
    var car = Car(name: "BYD", oil: 5, price: 100000)// 自动生成初始化方法
    for _ in 0..<20 {
        if car.oil < 5 {
            car.drive()
            car.addOil(100)
            car.drive()
        }else {
            car.drive()
        }
        print(car.oil)
    }
    

    类语法

    class CarClass {
        var name:String
        var oil:Double
        var price:Double
        
        init(name:String,oil:Double,price:Double){ // 
            self.name = name
            self.oil = oil
            self.price = price
        }
    }
    类继承时重写init
    //设计一个交通工具基类
    class Transportation {
        ///默认提供10 注释被选中时会在代码提示中显示
        var oil = 10
        var name:String
        
        init(name:String) {
            self.name = name
        }
    }
    class Car:Transportation {
        var circleCount:Int
        override init(name: String) {
            self.circleCount = 4  // 重写父类init,参数名称类型一致,只需加入新属性的初始化,加override
            super.init(name: name)
        }
    }
    class Boat:Transportation {
        var water:Int
        init(water:Int,name:String) {// 重载init函数,加override
            self.water = water
            super.init(name: name)
        }
    }
    

    相关文章

      网友评论

          本文标题:6.类与结构体

          本文链接:https://www.haomeiwen.com/subject/etiwahtx.html