Hola! El meu nom és Kiryl Famin, i sóc un desenvolupador iOS.
Avui vull analitzar en profunditat un tema aparentment simple: els inicialitzadors a Swift. Tot i la seva simplicitat aparent, la manca d'una comprensió completa del tema pot portar a errors frustrants que sovint es busquen solucionar ràpidament, sense entendre realment la causa.
En aquest article, cobrirem tot allò relacionat amb inicialitzadors, incloent:
- Com mantenir l'inicialitzador membre d'una estructura mentre es defineix un de personalitzat
- Per què no sempre és necessari definir un inicialitzador en classes
- Per què cridar a super.init no sempre és obligatori en un inicialitzador designat
- Per què tots els camps d'una subclasse han d'estar poblats abans de cridar a super.init
- Com accedir a tots els inicialitzadors de la classe pare amb la menor quantitat de sobreescriptures possibles
- Quan és realment necessari un inicialitzador required
- Per què UIView.init() sempre es crida sense paràmetres, però init(frame:) i init(coder:) sí es sobreescriuen
A Q2BSTUDIO, som una empresa de desenvolupament i serveis tecnològics especialitzada en crear solucions a mida per a diverses plataformes. Ens apassiona compartir coneixements amb la comunitat i millorar contínuament l'experiència de desenvolupament amb tecnologies modernes com Swift.
Ara, avancem pas a pas per comprendre a fons aquest tema.
Resum en Català:
- Tots els camps han d'estar poblats en un inicialitzador.
- Les propietats var opcionals tenen un valor per defecte de nil.
- Les estructures reben un inicialitzador membre automàticament.
- L'inicialitzador membre desapareix quan es defineix un de personalitzat.
- Un inicialitzador designat s'assegura que tots els camps siguin inicialitzats i crida a super.init().
- Un inicialitzador de conveniència simplifica el procés cridant a un altre inicialitzador designat.
- Els inicialitzadors de conveniència sempre criden a self.init, mentre que els designats criden a super.init.
- Si una subclasse defineix noves propietats, perd els inicialitzadors de conveniència de la seva superclasse.
- Per restaurar els inicialitzadors de conveniència d'una superclasse, cal sobreescriure tots els inicialitzadors designats.
- Per minimitzar la quantitat de sobreescriptures, es poden usar inicialitzadors de conveniència sobreescrits.
- Si una subclasse no introdueix nous paràmetres, hereta tots els inicialitzadors de la seva superclasse.
- Si una superclasse només té init() sense paràmetres, aquest es crida automàticament a les subclasses.
- Un inicialitzador required assegura que les subclasses l'implementin, útil en genèrics, protocols i crides a Self().
- UIView.init() crida internament a init(frame:) o init(coder:).
- Un inicialitzador fallable retorna un valor opcional.
- Les enumeracions amb valors crus obtenen un inicialitzador init?(rawValue:) automàticament.
- Tots els inicialitzadors en una enumeració han d'assignar un valor a self.
Esperem que aquest article t'hagi resultat útil. A Q2BSTUDIO creiem en l'excel·lència del desenvolupament i en compartir coneixements per ajudar altres desenvolupadors a millorar les seves habilitats cada dia.



