Kāda ir atšķirība starp convention un designated inicializatoriem Swift?
sobes.tech AI
Atbilde no AI
-
Norādītais inicijators: Galvenais, "pamatinis" inicijators klasē. Tam jāpilnībā inicializē visas savas klases glabātās īpašības, pēc tam jāizsauc augstākā līmeņa norādītais un inicijators (caur
super.init). Katram klasē jābūt vismaz vienam norādītajam inicijatoram. -
Ērtā inicijatora: Palīdzības inicijators, kas paredzēts, lai vienkāršotu klases piemēru izveidi noteiktos scenārijos. Tam obligāti jāizsauc cits tajā pašā klasē esošais inicijators – vai nu norādītais, vai cits ērtākais. Galu galā, ērtāko inicijatoru ķēde jāved uz norādīto inicijatoru tajā pašā klasē. Ērtie inicijatori nav obligāti.
Šeit ir inicializācijas deleģēšanas shēma:
Ērtā -> Norādītā (tajā pašā klasē)
Norādītā -> Norādītā (vecāklasē)
Piemērs:
class MyClass {
var value: Int
var name: String
// Norādītais inicijators
init(value: Int, name: String) {
self.value = value
self.name = name
}
// Ērtā inicijators
convenience init(value: Int) {
self.init(value: value, name: "DefaultName") // Izsauc to pašu klases norādīto inicijatoru
}
// Ērtā inicijators
convenience init(name: String) {
self.init(value: 0, name: name) // Izsauc to pašu klases norādīto inicijatoru
}
}
let instance1 = MyClass(value: 10, name: "Custom")
let instance2 = MyClass(value: 5)
let instance3 = MyClass(name: "Another")
Galvenā atšķirība ir to lomā inicializācijas ķēdē un deleģēšanas noteikumos: norādītais inicijators nodrošina pilnīgu savu īpašību inicializāciju un deleģē vecāklases inicijatoru, kamēr ērtie inicijatori vienkāršo piemēru izveidi, deleģējot citam inicijatoram tajā pašā klasē, galā nonākot pie norādītā inicijatora.