一、构造器
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)
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()//先设置三个属性的默认值,再给三个属性分别赋值
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)