类的初始化和反初始化

2021-12-24  本文已影响0人  一个栗

初始化器

struct Fahrenheit {
    var temperature : Double
    init() {
        temperature = 32.0
    }
}
var f = Fahrenheit()
print("The default temperature is \(f.temperature)")

执行结果如下:
The default temperature is 32.0

默认的属性值

struct Fahrenheit {
    var temperature = 32.0
}
var f = Fahrenheit()
print("The default temperature is \(f.temperature)")

默认的初始化器

class ShoppingListItem {
    var name : String?
    var quantity = 1
    var purchased = false
}
var item = ShoppingListItem()

自定义初始化

struct Celsius {
    var temperatureInCelsius : Double
    init(fromFahrenheit fahrenheit : Double) {
        temperatureInCelsius = (fahrenheit - 32.0) / 1.8
    }
    init(fromKelvin kelvin:Double) {
        temperatureInCelsius = kelvin - 273.5
    }
}
let boilingPointOfWater = Celsius(fromFahrenheit: 212.0)
let freezingPointOfWater = Celsius(fromKelvin: 273.15)

在初始化中分配常量属性

class surveryQuestion {
    let text :String
    var response : String?
    init(text: String) {
        self.text = text
    }
    func ask() {
        print(text)
    }
}
let beetsQuestion = surveryQuestion(text: "How about beets?")
beetsQuestion.ask()
beetsQuestion.response = "I also like beets. (But not with cheese.)"
beetsQuestion.ask()

执行结果如下:
How about beets?
How about beets?

结构体的成员初始化器

struct Size {
    var width = 0.0, height = 0.0
}
let towByTwo = Size(width: 2.0, height: 2.0)

值类型的初始化器委托

struct Size {
    var width = 0.0, height = 0.0
}
struct Point {
    var x = 0.0, y = 0.0
}
struct Rect {
    var origin = Point()
    var size = Size()
    init() {}
    init(origin: Point, size: Size) {
        self.origin = origin
        self.size = size
    }
    init(center: Point, size : Size) {
        let originX = center.x - (size.width / 2)
        let originY = center.y - (size.height / 2)
        self.init(origin: Point(x: originX, y: originY), size: size)
    }
}

类的继承和初始化

制定初始化器和便捷初始化器

类的初始化委托

两段式初始化

安全检查

两段式初始化过程-阶段1

两段式初始化过程-阶段2

初始化器的继承和重写

初始化器的自动继承

可失败初始化器

必要初始化器

反初始化

反初始化器

deinit {
        
}
上一篇下一篇

猜你喜欢

热点阅读