Sobes.tech
Middle

Mis vahe on Swiftis convention ja designated initsialiseerijatel?

sobes.tech AI

Vastus AI-lt

  • Määratud Initsialiseerija: Peamine, "põhjus" initsialiseerija klassis. Ta peab täielikult initsialiseerima kõik oma klassi salvestatud omadused ning seejärel kutsuma ülespoole määratud ja initsialiseerija (läbi super.init). Iga klass peab omama vähemalt ühte määratud initsialiseerijat.

  • Mugav Initsialiseerija: Abistav initsialiseerija, mis on mõeldud klassi eksemplaride loomise lihtsustamiseks teatud stsenaariumides. See kohustuslikult peab kutsuma teist sama klassi initsialiseerijat – kas määratud või teist mugavat. Lõpuks peab mugavate initsialiseerijate ahel viima määratud initsialiseerijani samas klassis. Mugavad initsialiseerijad ei ole kohustuslikud.

Siin on initsialiseerimise volitamise skeem:

Mugav -> Määratud (samasse klassi)
Määratud -> Määratud (vanemklassist)

Näide:

class MyClass {
    var value: Int
    var name: String

    // Määratud initsialiseerija
    init(value: Int, name: String) {
        self.value = value
        self.name = name
    }

    // Mugav initsialiseerija
    convenience init(value: Int) {
        self.init(value: value, name: "DefaultName") // Kutsutakse sama klassi määratud initsialiseerijat
    }

    // Mugav initsialiseerija
    convenience init(name: String) {
        self.init(value: 0, name: name) // Kutsutakse sama klassi määratud initsialiseerijat
    }
}

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

Peamine erinevus nende vahel on nende roll initsialiseerimisahelas ja volitamise reeglites: määratud initsialiseerija tagab oma omaduste täieliku initsialiseerimise ning volitab vanemklassi initsialiseerijat, samas kui mugavad initsialiseerijad lihtsustavad eksemplaride loomist, volitades teist initsialiseerijat samasse klassi, lõppkokkuvõttes viibides määratud initsialiseerijani.