构造器与析构器

一、构造器

1.没有参数的构造器。

其它面向对象语言中,构造器名需要与类型名相同,而在Switch语言中,无论类型名是什么,构造器名都是init

struct Fahrenheit{

    var temperature:Double

    init(){

        temperature =32.0

    }

}

//创建Fahrenheit对象的过程中,会调用init方法

var f = Fahrenheit()

print("the default temperature is\(f.temperature) ")



2.有参数的构造器(支持重载)

有参数的构造器,必须添加内部变量名。

构造器,不可以使用变异方法关键字(mutating)

1.参数个数不同,可以重载。

2.参数类型不同,可以重载。

3.外部变量名不同,可以重载。


1)类

class Celsius {

    var temperatureInCelsius :Double = 0.0

    init(fromFahrenheit fahrenheit:Double){   //fromFahrenheit为外部变量名

    

        temperatureInCelsius = (fahrenheit -32.0) / 1.8

    }

    

    init(fromKelvin kelvin:Double){   //fromKelvin为外部变量名

    

        temperatureInCelsius = kelvin -273.15

    }

}


let boilingPointOfWater = Celsius(fromFahrenheit:212.0)

let freezingPointOfWater = Celsius(fromKelvin:273.15)


2)结构体


struct Color {

    var red =0.0,green =0.0 , blue =0.0

    init(red:Double,green:Double,blue:Double){

    

        self.red = red

        self.green = green

        self.blue = blue

    }

    //注意:init方法不可使用mutating.

}


let magenta = Color(red:1.0,green:0.0,blue:1.0)//正确

let veryGreen = Color(1.0,0.0,1.0)//错误,必须有内部参数名。如果不另外加外部变量名,则默认内部变量名和外部变量名是一样的。



4.默认构造器

适用于类或者结构体

class ShoppingListItem {

    var name :String?

    var quantity =1

    var purchased =false

}

var item = ShoppingListItem()//先设置三个属性的默认值,再给三个属性分别赋值

ShoppingListItem :nil\quantity = 1\purchased = false

5.逐一成员构造器

只适用于结构体(虽然没有加构造器,但仍然可以通过外部变量名来赋值。)

struct ShoppingListItem2 {

    var width =1.0,height =2.0

}

let two = ShoppingListItem2(width:3,height:5)



二、析构器

关键字:deist


例如:

class DeinitTest {

    deinit{

       print("deinit")

    }

}


var deinitTest:DeinitTest? = DeinitTest()

deinitTest = nil   //会调用DeinitTest类的析构方法(deinit



你可能感兴趣的:(ios,构造器,init)