美文网首页
Note 7 类和结构体

Note 7 类和结构体

作者: cry_0416 | 来源:发表于2016-07-22 19:32 被阅读10次

    结构体

    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()对象会被释放
        //*对象一旦没有强引用类型引用的时候,就被释放*
    

    与结构体的区别

    • 用let定义的结构体变量,成员不能修改
    • 结构体是值类型.赋值的时候会发生赋值
    • 类是引用类型
    • 结构体的值不能随便修改,要加关键字mutating

    相关文章

      网友评论

          本文标题:Note 7 类和结构体

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