Koja je razlika između convention i designated inicijalizatora u Swift-u?
sobes.tech АИ
Одговор од АИ
-
Određeni inicijalizator: Glavni, "osnovni" inicijalizator u klasi. On mora potpuno inicijalizovati sve sopstvene skladištene osobine klase, a zatim pozvati odredjeni inicijalizator roditeljske klase (kroz
super.init). Svaka klasa treba da ima bar jedan odredjeni inicijalizator. -
Praktični inicijalizator: Pomoćni inicijalizator namenjen da pojednostavi kreiranje instanci klase u određenim scenarijima. Mora pozvati drugi inicijalizator iste klase — bilo odredjeni ili praktični. Na kraju, lanac poziva praktičnih inicijalizatora treba da dovede do poziva odredjenog inicijalizatora u istoj klasi. Praktični inicijalizatori su opcionalni.
Evo sheme delegacije inicijalizacije:
Convenience -> Određeni (u istoj klasi)
Određeni -> Određeni (u roditeljskoj klasi)
Primer:
class MyClass {
var value: Int
var name: String
// Određeni inicijalizator
init(value: Int, name: String) {
self.value = value
self.name = name
}
// Praktični inicijalizator
convenience init(value: Int) {
self.init(value: value, name: "DefaultName") // Poziva odredjeni inicijalizator u istoj klasi
}
// Drugi praktični inicijalizator
convenience init(name: String) {
self.init(value: 0, name: name) // Poziva odredjeni inicijalizator u istoj klasi
}
}
let instance1 = MyClass(value: 10, name: "Custom")
let instance2 = MyClass(value: 5)
let instance3 = MyClass(name: "Another")
Ključna razlika leži u njihovoj ulozi u lancu inicijalizacije i pravilima delegacije: odredjeni inicijalizator garantuje potpunu inicijalizaciju svojih svojstava i delegira inicijalizaciju roditelju, dok praktični inicijalizator pojednostavljuje kreiranje instanci delegiranjem na drugi inicijalizator u istoj klasi, koji na kraju poziva odredjeni inicijalizator.