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")
Негизги айырмасы алардын инициализациялык чынжырда жана делегирлөө эрежелеринде: белгиленген инициализатор өзүнүн мүлктөрүн толук инициализациялап, ата класска делегирлөө жасайт, ал эми ыкмалар чынжырлөөдө жеңилдик берет, башка инициализаторго делегирлөө жасайт сол эле класс ичинде, акырында белгиленген инициализаторго жетет.