Note 7 类和结构体

2016-07-22  本文已影响10人  cry_0416

结构体

struct student {
    var name : String?
    var number : Int?
    var age : UInt?
    func infoprint(){//结构体的方法,不能改变成员的值
        print(name, number, age)
    }
    static var i = 123 //静态成员,需要用结构体名来调用
    init() {//定义构造函数,对结构体成员进行初始化赋值
        name = ""
        number = 0
        age = 0
    }
    init(name:String){
        self.name = "cry"
    }
    init(number:Int){
        self.number = 23
    }

}

class dog {
    var kind: String = ""
    var weight: Double = 0.0
    
    static var i = 0 //静态成员,通过类名调用 类名.静态成员名 例如: dog.i
    
    func bite (name:String) -> Int{
        print("bite", name)
        return 1
    }
    //当类没有构造函数时,编译器自动生成一个无参的构造函数;一旦自己创建了构造函数,编译器就不会自动生成一个无参构造函数
    
    class func test(){
        print("test1")
        
        print(i)
        i = i + 1
    }//类方法不能直接使用成员变量,通过类名调用,可以使用静态成员
}

定义

    let dog1 = dog()
    //如果是结构体,dog1 的属性不能更改
    //let改成var就可以
    dog1.kind = "中华田园犬"
    dog1.weight = 4
    print(dog1.bite("xx"))

    let dog2 = dog1
    dog2.kind = "藏獒" //如果是结构体 则变成两个,类是引用类型
    //strong/weak 强引用 弱引用
    //当一个对象被创建了,没有被使用的时候会被释放
    //例:
    var d1 = dog() //一旦执行dog(),就创建一个对象,让d1引用这个对象,相当于给了这个对象名字d1
    weak var d2 = d1 //让d2同样引用这个对象,weak定义的变量 一定是可选类型(optional类型)
    d1 = dog() //重新创建一个对象,让d1指向了这个对象
    //一开始创建的那个对象,只有d2在引用,但是是weak引用
    //所以一开始的dog()对象会被释放
    //*对象一旦没有强引用类型引用的时候,就被释放*

与结构体的区别

上一篇下一篇

猜你喜欢

热点阅读