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.