iOS swift学习之入门详解(对象和类)

  • 定义类
    class Dog {
        let name = "wang wang"
        var age = 0
    
        func talk(){
            print("我是一只单身狗")
        }
    }
    
    使用类如下:
    
    let dog=Dog()
    dog.age = 10
    dog.talk()
    
    可以看到,Swift相比ObjC回归正常了,类是class而不是interface了。类里的成员变量或常量就是类的属性,不用像ObjC那样以@property开头了。定义属性时可以直接赋初始值。定义成员函数与定义全局函数在语法上并没有半毛区别。
    
    创建类的实例时,其语法跟ObjC之外的语言一致了,通过“()”里的参数对应某个构造方法。我们没有为上面的类提供额外的构造方法,所以使用了默认的构造方法(没有任何参数的那个)。不论是使用属性还是调用成员(方法)函数,都用点即可。
    
    类不必有父类,这点与ObjC不同,ObjC的类必须直接或间接从NSObject派生。
    
    构造方法
    构造方法的名字都叫“init”。
    
    class Dog {
        let name:String
        var age:Int
    
       init(){
            self.name = "wang wang"
            self.age = 10
        }
    
       init(name:String,age:Int){
            self.name = name
            self.age = age
        }
    
       func talk(){
            print("我是一只单身狗")
        }
    }
    
    增加了2个构造方法,把属性的初始化移到构造方法中了,这跟上一个例子的初始化方式实质上没有区别。注意常量属性只能在构造方法中初始化一次。到底是使用哪个构造方法来初始化,这得看在创建类实例时传的参数。每个属性必须都要进行初始化。可以在声明它时,也可以在构造方法中。
    
    self代表实例自身,相当于其它语言里的this。
    
    析构方法
    与构造方法对应,析构方法叫做“deinit”。在实例要被销毁前被调用。里面可以做一些清理工作。析构方法只能有一个且没有参数。例如:
    
    class Dog {
        let name:String
        var age:Int
    
       init(){
            self.name = "wang wang"
            self.age = 10
        }
    
       init(name:String,age:Int){
            self.name = name
            self.age = age
        }
    
       //析构方法,因为不需要参数,因此连“()”都不能带了
        deinit{
            print("看到这句话,就是我的死期,永别了世界")
        }
    
       func talk(){
            print("我是一只单身狗")
        }
    }
    
    继承
    //撸码狗
    
    class CodingDog : Dog{
        var codingYears:Double
    
        //构造方法
        init(name:String,age:Int,codingYears:Double){
            self.codingYears=codingYears
            super.init(name: name, age: age)
        }
    
        //重写了父类的方法
        override func talk(){
            print("我是一只撸码狗")
        }
    }


你可能感兴趣的:(iOS swift学习之入门详解(对象和类))