码迷,mamicode.com
首页 > 其他好文 > 详细

构造器

时间:2015-03-20 18:52:08      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:构造器


        结构体和类在创建实例的过程中需要进行一些初始化的工作,这个过程称为构造过程。相反,在这些实例最后被释放的时候需要进行一些资源清除的工作,这个过程称为析构过程。


        结构体和类的实例在构造的过程中会调用一种特殊方法,称为构造器,构造器init没有返回值,可以重载,在多个构造器重载的情况下,运行环境可以根据它的外部参数或参数列表调用合适的构造器。类似的方法在Object-C中称为构造方法,在C++中称为构造函数,Object-C中的构造方法有返回值,而C++中的构造函数名必须与类名相同,没有返回值。


一、默认构造器

        结构体和类在构造过程中都会调用一个构造器,即便是没有编写任何的构造器,也存在一个默认的构造器


        1、类默认构造器

            class  Rectangle{
                    var width:Double = 0.00
                    var height:Double = 0.00
}
        var rect = Rectangle()
        rect.width = 320.00
        rect.height = 350.00


         事实上,在Rectangle的定义过程中省略了构造器,相当于如下代码


            class  Rectangle{
                    var width:Double = 0.00
                    var height:Double = 0.00
                    init(){
                            self.width = 10.0
                            self.height = 20.0
                    }
}
        var rect = Rectangle()
        rect.width = 320.00
        rect.height = 350.00

        2、结构体默认构造器

            struct Rectangle {
                    var width:Double = 0.00
                    var height:Double = 0.00             
}

                    而结构体Rectangle的默认构造器与类Rectangle的构造器是不同的,相当于如下代码:

    struct Rectangle {
                    var width:Double = 0.00
                    var height:Double = 0.00
                    
                    init(){} //无参默认构造器            
}

        var rect = Rectangle(width: 10,height:20) //结构体默认的有参数的构造器

            

二、构造器与存储属性初始化

    

        1、初始化存储属性


            构造器的主要作用就是初始化存储属性,在init()构造器中初始化存储属性width和height后,那么在定义它们时就不需要初始化了;


            

            class  Rectangle{
                    var width:Double = 0.00
                    var height:Double = 0.00
                    init(){
                            width = 10.0
                            height = 20.0
                    }
}

            如果存储属性在构造器中没有初始化,在定义的时候也没有初始化,那么在编译的时候会出错;


    2、初始化常量存储属性

        class Employee{
                let no:Int = 0
                var name:String?
                var salary:Double
                var dept:Department?
                init(){
                    no = 0    //不能在普通方法中赋值
                    salary = 0.0
}
                struct Department{
                        let no:Int
                        var name:String
                        init(){
                                no = 10       //不能在普通方法中赋值
                                name = "SALES"
        }
}

            存储属性一般在定义的时候初始化,如果不能确定初始值,可以采用可选类型属性,或者也可以在构造器中初始化。


三、使用外部参数名


        1、外部参数名


        为了增强程序的可读性,Swift的方法和函数可以使用外部参数名,在构造器中也可以使用外部参数名,构造器中的外部参数名要比一般的方法和和函数更有意义,由于构造器命名都是init,如果一个对象类型中有多个构造器,我们就可以通过不同的外部的参数名区分不同的构造函数


            

            class  Rectangle{
                    var width:Double = 0.00
                    var height:Double = 0.00
                    init(W width:Double,H height:Double){
                            self.width=width
                            self.height = height
                    }
                    var rect = Rectangle(W:320,H:480)
                    
}

          2、简化外部参数名


                外部参数名可以简化,在函数中可以在参数前加#,使得局部参数名变成外部参数名,但在构造器中就不用这么麻烦,构造器中的局部参数名可以直接作为外部参数名使用:

   




本文出自 “平凡之路” 博客,请务必保留此出处http://linjohn.blog.51cto.com/1026193/1622588

构造器

标签:构造器

原文地址:http://linjohn.blog.51cto.com/1026193/1622588

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!