Swiftте convention жана designated инициализаторлорунун айырмасы эмнеде?
sobes.tech AI
AIден жооп
-
Белгиленген Инициализатор: Класс ичиндеги негизги, "негизги" инициализатор. Ал классдын бардык өзүнчө сакталган мүлктөрүн толук инициализациялоо керек, андан кийин жогорку деңгээлдеги белгиленген жана инициализациялоочу (designated) жана родитель классынан (super.init аркылуу) чакыруу керек. Ар бир класс кеминде бир белгиленген инициализаторго ээ болушу керек.
-
Көңүл буруу Инициализатор: Кээ бир сценарийлерде класс үлгүсүн түзүү үчүн жардамчы инициализатор. Ал мыйзамдуу түрдө ошол эле класс ичиндеги башка инициализаторду чакырышы керек – белгиленген же башка көңүл буруу. Акырында, көңүл буруу инициализаторлорунун чынжыры белгиленген инициализаторго жеткириши керек. Көңүл буруу инициализаторлору милдеттүү эмес.
Мындан ары инициализациянын делегирлөө схемасы:
Көңүл буруу -> Белгиленген (сол эле класс)
Белгиленген -> Белгиленген (ата класс)
Мисал:
class MyClass {
var value: Int
var name: String
// Белгиленген инициализатор
init(value: Int, name: String) {
self.value = value
self.name = name
}
// Көңүл буруу инициализатор
convenience init(value: Int) {
self.init(value: value, name: "DefaultName") // Бул ошол эле класс ичиндеги белгиленген инициализаторду чакырат
}
// Көңүл буруу инициализатор
convenience init(name: String) {
self.init(value: 0, name: name) // Бул ошол эле класс ичиндеги белгиленген инициализаторду чакырат
}
}
let instance1 = MyClass(value: 10, name: "Custom")
let instance2 = MyClass(value: 5)
let instance3 = MyClass(name: "Another")
Негизги айырмасы алардын инициализациялык чынжырда жана делегирлөө эрежелеринде: белгиленген инициализатор өзүнүн мүлктөрүн толук инициализациялап, ата класска делегирлөө жасайт, ал эми көңүл буруу инициализаторлору үлгү түзүүдө жеңилдик берет, башка инициализаторго делегирлөө жасайт сол эле класс ичинде, акырында белгиленген инициализаторго жетет.