6.类与结构体

2020-06-08  本文已影响0人  LucXion

结构体是功能仅逊于类的数据结构,其也可以描述拥有某些属性和行为的事物,只是它的实现机制和类有着本质的区别,应用场景也有所不同。
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)
    }
}
上一篇下一篇

猜你喜欢

热点阅读