12-初始化

2023-04-10  本文已影响0人  二斤寂寞

初始化器

// 指定初始化器
init(parameters) {
    statements
}

// 便捷初始化器
convenience init(parameters) {                                  
    statements
}

初始化器的相互调用

image.png

两段式初始化

Swift****在编码安全方面是煞费苦心,为了保证初始化过程的安全,设定了两段式初始化、 安全检查

安全检查

重写

□ 因为父类的便捷初始化器永远不会通过子类直接调用,因此,严格来说,子类无法重写父类的便捷初始化器

自动继承

Required

class Person {
    required init() { }
    init(age: Int) { }                                                            
}

class Student : Person {
    required init() {
        super.init()
    }                                                              
}

属性观察器

class Person {
    var age: Int {
        willSet {
            print("willSet", newValue)                          
        }
        didSet {
            print("didSet", oldValue, age)
        }                                                       
    }
    init() {                                                    
       self.age = 0
    }                                                           
}

class Student : Person {
    override init() {
        super.init()                                                             
            self.age = 1
        }                                                       
}
// willSet 1
// didSet 0 1
var stu = Student()

可失败初始化器

class Person {
    var name: String
    init?(name: String) {
        if name.isEmpty  {
            return nil                                                            
        }
        self.name = name
    }                                                           
}
var num = Int("123")
public init?(_ description: String)
enum Answer : Int {
    case wrong, right
}
var an = Answer(rawValue: 1)

反初始化器

class Person {
    deinit {                                                             
        print("Person对象销毁了")
    }                                                            
}
上一篇下一篇

猜你喜欢

热点阅读