Sobes.tech
Middle

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.