swift学习笔记(4)--结构体和类

//类和结构体
//相同点
//1.类和结构体都可以定义属性和方法(这是和c oc中的结构体的最大区别)
//2.类和结构体中都能定义构造器方法

//不同点
//1.类可以在析构体deinit中释放资源,结构体不可以
//2.类可以继承.结构体是不能被继承
//3.类是一个引用类型,一个实例可以有多个引用,操作的是实例的本身;结构体是值类型,将内容拷贝到新的内存中,操作的是一块新的内存

1.结构体

//结构体
struct length{
    var stat = 0.0
    var end = 0.0
    init(stat : Double , end : Double)
    {
        self.stat = stat
        self.end = end
    }
    func calculateLength() -> Double
    {
        return self.end - self.stat
    }


}


var len = length(stat: 30, end: 100)

len.calculateLength()

2.类

//类

class Car{
    var carName = String?()
    var len : length!
    init(name : String){
        self.carName = name
    }

    //析构器 , 当类的实例释放的时候可以释放资源
    deinit
    {

    }
}

3.值类型(结构体)与引用类型(类)

var car = Car(name:"BYD")
car.len = length(stat:20 , end:700)
car.len.stat

//值类型,操作的是拷贝的内容
var leng = car.len
leng.stat = 100
car.len.stat

car.carName

//引用类型,操作的实例本身
var car1 = car
car1.carName = "aoTuo"
car.carName

4.属性
(1).存储属性,将常量或者变量作为实例的一部分使用

struct Point{
    var x = 0.0
    var y = 0.0
}


struct Size{
    var width = 0.0
    var height = 0.0
}

(2).计算属性,提供一个get方法来获取值,也可以提供一个可选的set方法来设置值

struct Rect {
    var oraigon = Point()
    var size = Size()
    var center : Point{
        get{

            let centerX = size.width/2 + oraigon.x
            let centerY = size.height/2 + oraigon.y
            return Point(x: centerX, y: centerY)

        }

        set(newCenter){
            oraigon.x = newCenter.x - size.width/2
            oraigon.y = newCenter.y - size.height/2
        }

    }
}

var rect = Rect()
rect.oraigon.x = 10
rect.oraigon.y = 10
rect.size.width = 100
rect.size.height = 100
rect.center.x
rect.center.y

rect.center = Point(x: 100, y: 100)
rect.oraigon.x

(3).类型属性

class Stu{

    class var age : Int{
        return 29
    }
    var name : String!
    var type : String!
    init(name : String , type : String){
        self.name = name
        self.type = type

    }
    func printName() -> String{
        return self.name
    }

//类的类型和方法,用class关键字声明
    class func printAge() -> Int{
        return self.age
    }

}

Stu.printAge()
var stu = Stu(name: "hanlei", type: "213")
stu.printName()
Stu.age

5.类的继承

class St : Stu{
    //重写父类方法,方法前加override关键字
    override func printName() -> String{
        return self.name
    }

    override init(name: String, type: String) {
        super.init(name: name, type: type)
    }


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值