Sobes.tech
Middle

Тафовут байни initializer-ҳои convention ва designated дар Swift чист?

sobes.tech AI

Ҷавоб аз AI

  • Таъиншудаи Инициализатор: Инициализатори асосӣ, "основӣ" дар синф. Вай бояд тамоми хосиятҳои захирашударо комилан оғоз кунад ва сипас инициализатори таъиншудаи синфи падарро (бо истифодаи super.init) даъват кунад. Ҳар як синф бояд ҳадди ақал як инициализатори таъиншуда дошта бошад.

  • Инициализатори қулай: Инициализатори ёрдамӣ, ки барои содда кардани сохтани намунаҳои синф дар сценарияҳои муайян пешбинӣ шудааст. Маъзур аст ки дигар инициализаторро аз ҳамон синф — ё таъиншуда ё қулай — даъват кунад. Дар ниҳояти кор, занҷираи даъватҳои инициализаторҳои қулай бояд ба даъвати инициализатори таъиншуда дар ҳамон синф оварда расонад. Инициализаторҳои қулай ихтиёрӣ мебошанд.

Ин аст схемаи намояндагии инициализатсия:

Convenience -> Таъиншуда (дар ҳамон синф)
Таъиншуда -> Таъиншуда (дар синфи падар)

Масалан:

class MyClass {
    var value: Int
    var name: String

    // Инициализатори таъиншуда
    init(value: Int, name: String) {
        self.value = value
        self.name = name
    }

    // Инициализатори қулай
    convenience init(value: Int) {
        self.init(value: value, name: "DefaultName") // Даъват аз инициализатори таъиншуда дар ҳамин синф
    }

    // Инициализатори қулайи дигар
    convenience init(name: String) {
        self.init(value: 0, name: name) // Даъват аз инициализатори таъиншуда дар ҳамин синф
    }
}

let instance1 = MyClass(value: 10, name: "Custom")
let instance2 = MyClass(value: 5)
let instance3 = MyClass(name: "Another")

Нақши асосӣ дар он аст, ки онҳо дар занҷираи инициализатсия ва қоидаҳои намояндагӣ чӣ нақш доранд: инициализатори таъиншуда кафолат медиҳад, ки хосиятҳои худро пурра оғоз мекунад ва ба синфи падар намояндагӣ мекунад, дар ҳоле ки инициализатори қулай ба осон кардани сохтани намунаҳо тавассути намояндагӣ ба инициализатори дигар — ки дар ниҳояти кор, инициализатори таъиншударо даъват мекунад — кӯмак мекунад.