Qallta
Kamisaki! Nayan sutijax Kiryl Famin satawa, ukat nayax iOS ukan irnaqiritwa.
Jichhürunakanxa, Swift ukan inicializadores ukham mä sanu tema ukar sum uñakipañ munta. Ukham jan chʼamäkaspas ukhamäkchisa, awisajj uka toqet jan sum amuytʼasajja, jan waltʼayir pantjasiwinakaruw puriyi, uka pantjasiwinakjja, jan sum amuytʼasisaw jankʼak askichañ muni.
Aka qillqatanx taqi kunatix qalltawimp chikt’atäki ukanak uñakipt’añäni, ukanakax akanakawa:
Kunjamas estructura ukan miembron inicializador ukax mä costumbre ukar uñt’ayañkamax katxaruñapa
Kunatsa jan sapa kutix clasenakan mä inicializador qillqañax wakiskiti
Kunatsa
super.init
jawsañax janiw sapa kutix mä designado inicializador ukanx wakiskitiKunatsa mä subclase ukan taqpach yapunakapax janïr
super.init
ukar jawsañkamax phuqhantatäñapaKunjamas taqi awki tayka qalltayirinakarux jisk’a ch’amanchawinakampi subclases ukan mantañax
Kunapachatixa chiqapa mä
required
ukaxa wakisiKunatsa
UIView.init()
ukax sapa kutiw jan parámetros ukanakamp jawsatäna, ukampisinit(frame:)
ukatinit(coder:)
ukax chhaqtayatawa
...ukat juk’ampinaka. Ukampis mä jukʼat mä jukʼa parltʼañäni.
Tabla de Contenido ukax mä juk’a pachanakanwa
Ukax mä juk’a pachanakanwa
Estructuras ukanaka
- Miembronakaparjama qalltiri
- Opcionales ukanaka
-
var
vs ukaxlet
- Mä miembron inicializador ukar katxaruña
Yatiqañ utanaka
- Uñt’ayata qalltawi
- Conveniencia qalltañataki
- Superclase ukan conveniencia inicializador ukar katxaruña
- Jakhuwi jisk’achaña
- Compilador ukan yanapt’awipa
-
required
qalltiri: genéricos, protocolos,Self()
,final
-
UIView()
ukax mä parámetros ukaniwa
Honorable mencionanaka
- Ukax mä init ukhamawa
- Enums ukat juk’ampinaka
Juk'achata
Uka tuqit wakiskir enlaces ukanaka
Ukax mä juk’a pachanakanwa
Apple ukan guia The Swift Programming Language (6) (ukax, chiqans, muspharkañ uñt’ayatawa inicializadores ukanakataki) akham siwa:
Initialización ukax mä instancia de clase, estructura jan ukax enumeración ukanak apnaqañatakiw wakicht’i. Aka lurawixa sapa imatäki uka yänakatakixa qallta chanipa utt’ayañawa ukatxa yaqha wakicht’awi jan ukaxa qalltawi lurañawa kunatixa wakisi janïra machaq uñacht’awixa apnaqañataki wakicht’atäkipana.
Aka qalltañ lurawix phuqhachatawa qalltawinak uñt’ayasa , ukax kunayman thakhinakjamawa, ukax mä machaq instancia lurañatakiw jawsatäspa, mä kasta kasta. Objetivo-C qalltayirinakat sipansa, Swift qalltirinakax janiw mä chimpu kutt’ayapkiti. Jupanakan nayrïr lurawipax machaq instancias de un tipo ukanakax chiqapar qalltañapatakiw janïr nayrïr kuti apnaqañkama.
Suma, nayax amuyta janiw kunas akan yapxatañax wakiskiti.
Estructuras ukanaka
Qalltañatakix estructura inicializadores ukanakat aruskipt’añäni. Ukax wali ch’amawa kunatix janiw herenciax utjkiti, ukampis yaqhip kamachinakax utjaskakiwa, ukanak yatiñax wakisiwa.
Miembronakaparjama qalltiri
Mä sanu lurawi qillqt’añäni:
struct BankAccount { let amount: Double let isBlocked: Bool } let bankAccount = BankAccount(amount: 735, isBlocked: Bool)
Uñakipt’añatakix mä qalltayirir jan qhan uñt’ayasax estructura ukar qalltañ atipxtanxa. Ukax lurasiwa kunatix estructuras ukanakax mä miembro inicializador ukar katuqapxi, ukax compilador ukan luratawa. Ukax estructuras ukanakatakik irnaqaski .
Refactor → Generar inicializador de miembros ukar ajllisaw kunjams uñstaski uk uñjasma:
init(amount: Double, isBlocked: Bool) { self.amount = amount self.isBlocked = isBlocked }
Firma tuqitxa, taqi parámetros ukanakatakix valores ukanakax jan churañax mä compilación pantjasiw utjayaspa uk uñjañax jasakiwa:
let bankAccount = BankAccount(amount: 735) // ❌ Missing argument for parameter 'isBlocked' in call
Ukampirus, wakiskir argumientunak jisk’achañ munsta ukhax mä costumbre inicializador ukar uñt’ayasma:
init(amount: Double, isBlocked: Bool = false) { self.amount = amount isBlocked = isBlocked } let bankAccount = BankAccount(amount: 735) // ✅
Qhanacht’añatakix isBlocked
ukax janiw phuqhantatäkiti, ukax mä pantjasiw compilación ukaruw purini kunatix taqi propiedades de estructura ukax mä inicializador ukan phuqhantatäñapawa .
Opcionales, var
vs let
Mä yapux janiw qhananchañax wakiskiti, ukax mä variable opcional ( ?
) ( var
) ukhamawa. Ukhamächi ukhaxa, yapux nil
ukar uñtatawa :
struct BankAccount { let amount: Double var isBlocked: Bool? init(amount: Double) { self.amount = amount } } let bankAccount = BankAccount(amount: 735) // ✅
Ukampirus, aka tuqinx memberwise initializer uka apnaqañ yant’añäni ukhax mä compilación pantjasiw jikxatañäni:
let bankAccount = BankAccount( amount: 735, isBlocked: false ) // ❌ Extra argument 'isBlocked' in call
Mä miembron inicializador ukar katxaruña
Ukax lurasi kunatix mä inicializador costumbre ukar uñt’ayañax miembros inicializadores ukarux apsuwayiwa. Wali qhananchañax wakisiwa, ukampis janiw automáticamente ukax utjkaniti.
Ukampirus, mä jisk’a k’ariw utji, miembron qalltayirip katxaruñataki: mä extension
ukan qalltayirir uñt’ayaña .
struct BankAccount { let amount: Double var isBlocked: Bool? } extension BankAccount { init(amount: Double) { self.amount = amount } } let barclaysBankAccount = BankAccount(amount: 735) // ✅ let revolutBankAccount = BankAccount(amount: 812, isBlocked: false) // ✅ print(barclaysBankAccount.isBlocked) // nil print(barclaysBankAccount.isBlocked) // false
Suma qhanañcht’awi estructuras ukanakataki
- Taqi yapunakax mä inicializador ukan phuqhantatañapawa
- Opcional
var
yapunakaxnil
ukar uñtatawa - Estructuras ukax mä inicializador miembro ukan inakiw katuqapxi
- Miembron qalltayiripax chhaqtawayxiwa, mä costumbre qalltayirix yatiyatawa
- Estructura ukan miembron inicializador ukar katxaruñatakix, mä
extension
ukan mä costumbre ukar uñt’ayaña
Yatiqañ utanaka
Uñt’ayata qalltawi
Mä clase ukan nayrïr qalltayiripax uñt'at qalltawiwa . Ukajj pä amtaruw yanaptʼi:
- Taqi yapunakaxa phuqhantatäñapataki uñjaña
- Uka clase ukaxa herencia ukhamawa, ukaxa superclase inicializador satawa
class Animal { var name: String init(name: String) { self.name = name } } class Dog: Animal { var breed: String var name: String init(breed: String, name: String) { self.breed = breed super.init(name: name) } }
Taqi yapunakax janïr super.init
ukar jawskasax phuqhantatäñapawa . Ukax kunatix superclase inicializador ukax subclase ukan jan walt’ayat thakhinak jawsaspawa, ukax jan pobladas subclase propiedades ukar mantaspawa.
class Animal { var age: Int init(age: Int) { self.age = age getInfo() } func getInfo() { print("Age: ", age) } } class Dog: Animal { var breed: String init(breed: String, age: Int) { self.breed = breed // imagine we haven't done this super.init(age: age) } override func getInfo() { print("Age: ", age, ", breed: ", breed) } }
Ukhamat, jan self.breed = breed
ukar uñt’ayasksna ukhax mä pantjasiw apnaqañ pachan jikxatassna kunatix Animal
inicializador ukax Dog
clase ukanx getInfo()
uka lurawiruw jawsaspa. Aka lurawix breed
propiedad ukar mantañ yant’i, ukax janiw jichhakamax jaqichatäkaspati.
Estructuras ukanakat sipansa, clases ukanakax janiw mä inicializador implícito miembro ukarjam katuqapkiti. Jan qalltatäki uka propiedades ukanakax utjki ukhaxa, mä compilación pantjasiwiw utji:
class Animal { // ❌ Class 'Animal' has no initializers var age: Int }
class Animal { // ✅ var age: Int = 0 }
class Animal { // ✅ var age: Int? }
class Animal { } // ✅
Conveniencia qalltañataki
Yatichäwinakax mä conveniencia inicializador ukanirakiwa . Janiw designados inicializadores ukar uñtaskiti, janiw mä objeto zero ukhat lurapkiti jan ukasti yaqha inicializadores ukan lógica ukar wasitat apnaqasaw qalltañ lurawix simplifica.
class Rectangle { var width: Double var height: Double init(width: Double, height: Double) { self.width = width self.height = height } convenience init(side: Double) { self.init(width: side, height: side) // uses a designated initializer of self } }
Conveniencia inicializadores ukanakax designados inicializadores jan ukax yaqha conveniencia inicializadores ukanakaruw jawsapxaspa. Qhiparusti, mä designado inicializador ukax sapa kutiw jawsatäni.
Conveniencia qalltirinakax sapa kutiw horizontal (self.init) ukar sarapxi, ukatx designados inicializadores ukanakax verticales (super.init) ukar sarapxi.
Superclass ukan Conveniencia Inicializador ukar katxaruña
Mä subclase ukax machaq propiedades ukanakat yatiyas ukhax taqi superclase ukan conveniencia inicializadores ukanakarux janiw mantañapakiti.
class Animal { var age: Int var name: String init(age: Int, name: String) { self.age = age self.name = name } convenience init(age: Int) { self.init(age: age, name: "Default") } convenience init(name: String) { self.init(age: 0, name: name) } } class Dog: Animal { var breed: String init(age: Int, name: String, breed: String) { self.breed = breed super.init(age: age, name: name) } } let dog = Dog(age: 3) // ❌ Missing arguments for parameters 'breed', 'name' in call
Ukax askichasispawa taqi superclase ukan uñt’ayat qalltayirinakar jan yäqasa .
class Dog: Animal { // ... override init(age: Int, name: String) { self.breed = "Mixed" super.init(age: age, name: name) } } let dog = Dog(age: 3) // ✅
Jasakiw uñjañaxa, ukhamatwa, mä conveniencia inicializador jutir subclase ukan apnaqañatakix pä inicializadores ukarux chhaqtayañaw wakisi.
class GuideDog: Dog { var isTrained: Bool override init(age: Int, name: String) { self.isTrained = false super.init(age: age, name: name) } override init(age: Int, name: String, breed: String) { self.isTrained = false super.init(age: age, name: name, breed: breed) } init(age: Int, name: String, breed: String, isTrained: Bool) { self.isTrained = isTrained super.init(age: age, name: name, breed: breed) } } let dog = GuideDog(age: 3) // ✅
Jakhuwi jisk’achaña
Ukampirus ukax mä conveniencia override initializer ukampiw jan lurasispa .
class Dog: Animal { var breed: String convenience override init(age: Int, name: String) { self.init(age: age, name: name, breed: "Mixed") // self, not super } init(age: Int, name: String, breed: String) { self.breed = breed super.init(age: age, name: name) } } class GuideDog: Dog { var isTrained: Bool // override init(age: Int, name: String) { // self.isTrained = false // // super.init(age: age, name: name, breed: "Mixed") // } convenience override init(age: Int, name: String, breed: String) { self.init(age: age, name: name, breed: breed, isTrained: false) // self, not super } init(age: Int, name: String, breed: String, isTrained: Bool) { self.isTrained = isTrained super.init(age: age, name: name, breed: breed) } } let dog = GuideDog(age: 3) // ✅
Jichhax sapa subclase ukanx 2 explícitamente especificados inicializadores ukanakakiw utjistu.
Uñakipt’aña kunjams conveniencia override initializers ukax self
designado init sasin sutichapxi super.init
uksat sipansa.
Aka k’arix Swift in Depth 5 t’aqapanx Tjeerd in 't Veen ukan 5 t'aqapanw sum qhanañchasi, uka librox nayatakix wali askiwa.
Chika taypinkiri suma qhananchawi
- Mä uñt’at qalltayirix taqi yänakax phuqhantatañapatakiw uñji ukatx
super.init()
ukaruw jawsaraki. - Mä conveniencia inicializador ukax qalltañ simplifica, mä designado inicializador ukar jawsasa.
- Mä conveniencia inicializador ukax subclases ukanakatakix janiw utjxiti, jupanakax machaq propiedades ukanakat yatiyapxi ukhaxa.
- Mä superclase ukan conveniencia inicializador ukar kutt’ayañatakix , taqi uñt’at inicializadores ukanakax chhaqtayatäñapawa.
- Jakhuwi jisk’achañatakixa, mä conveniencia uñakipaña qalltayirimpiwa apnaqasispa.
Compilador ukan yanapt’awipa
Jiwasax nayraqat arsuwaytanwa, mä subclase ukax machaq parámetros ukar jan uñt’ayañapatakix, ukax automáticamente taqi superclase ukan qalltayirinakap herencia ukham katuqaraki.
class Base { let value: Int init() { value = 0 } init(value: Int) { self.value = value } } class Subclass: Base { } let subclass = Subclass() // ✅ let subclass = Subclass(value: 3) // ✅
Ukampirus yaqha wakiskir amtawix utjarakiwa: superclase ukax mä inicializador designado ukakiw utji ukatx jan parámetros ( init()
jan argumentos ukampi), ukhamax subclase ukan qhananchata inicializadores ukax janiw super.init()
ukar jawsañax wakiskiti. Ukhamächi ukhaxa, Swift compilador ukax automáticamente jawsañx super.init()
utjki ukaruw jan arsuwinakampix uñt’ayi.
class Base { init() { } } class Subclass: Base { let secondValue: Int init(secondValue: Int) { self.secondValue = secondValue // ✅ without explicit super.init() } }
Uka chimpux apthapitawa kunatix super.init()
ukax implícitamente jawsatawa. Ukax yaqhip uñacht’äwinakatakix wali wakiskiriwa.
Mayita
Mä required
qalltayirix taqi chiqanw apnaqasi, kawkhantix mä subclase ukax pachpa qalltawimp chikaw base clase ukampix utjañapa. Ukhamaraki super.init()
ukaruw jawsañapa. Aka amparamp qillqt’at uñacht’awinakax kawkhantix mä required
qalltawix wakisi.
Genéricos ukanaka
Mä genérico tipo ukan init
jawsañax mä required init
uñt'ayasakiw lurasispa.
class Base { } class Subclass: Base { } struct Factory<T: Base> { func initInstance() -> T { // ❌ Constructing an object of class T() // type 'T' with a metatype value } // must use a 'required' initializer }
Aka codigox janiw compilar kunatix Factory
ukax janiw kuns yatiskiti subclases de Base
ukanakat. Ukhampachasa aka particular tuqinxa, Subclass
ukax mä init()
ukampiw jan parámetros ukampix utji, amuyt’añäni, machaq yapu uñt’ayaspa ukhaxa:
class Subclass: Base { let value: Int init(value: Int) { self.value = value } }
Aka chiqanx, janiw ch’usat init
ukanïxiti, ukhamax kunjamtix required
ukhamarjamaw yatiyatäñapa .
class Base { required init() { } } class Subclass: Base { } struct Factory<T: Base> { static func initInstance() -> T { // ✅ T() } } let subclass = Factory<Subclass>.initInstance()
Qhanacht’añatakix janis Subclass
ukan required init
uñt’ayasktan ukhas compilador ukax jiwasatakiw uñstayi. Uka tuqitxa Compilador ukan yanapt’awipanw aruskipt’asiwayi. Uka required init
ukax automáticamente herencia ukat super.init()
satawa.
class Subclass: Base { required init() { super.init() } }
Protocolos ukanaka
Taqi inicializadores ukanakaxa protocolos ukanakana qhananchata ukanakaxa required
:
protocol Initable { init() } class InitableObject: Initable { init() { // ❌ Initializer requirement 'init()' can only // be satisfied by a 'required' initializer } // in non-final class 'InitableObject' }
Maysatxa, akax wakisiwa ukhamat compilador ukax subclase ukax protocolo inicializador ukar phuqhañapataki. Kunjamtï yatktanxa, janiw sapa kutix ukhamäkiti —init init
janiw required
, subclase ukax janiw obligat ukhamäkiti ukat inas jupan qalltayirip qhanañchchispa.
class IntValue: InitableObject { let value: Int init(value: Int) { self.value = value } } let InitableType: Initable.Type = IntValue.self let initable: Initable = InitableType.init()
Chiqans, aka chimpux janiw compilatäkaniti kunatix Base.init()
ukax janiw required
.
class InitableObject: Initable { required init() { } // ✅ } class IntValue: InitableObject { let value: Int required init() { self.value = 0 } init(value: Int) { self.value = value } }
Ukaña()
Ukham uñtasitaw Self()
qalltayirir jawsañax métodos estáticos ukanx utji.
class Base { let value: Int init(value: Int) { self.value = value } static func instantiate() -> Self { Self(value: 3) // ❌ Constructing an object of class type 'Self' } // with a metatype value must use a 'required' initializer }
Kunjamtix nayrax lurapxirïktxa, uka jan walt’awix herencia tuqitwa:
class Subclass: BaseClass { let anotherValue: Int init(anotherValue: Int) { self.anotherValue = anotherValue } } let subclass = Subclass.instantiate() // ❌
class BaseClass { let value: Int required init(value: Int) { // ✅ self.value = value } static func instantiate() -> Self { Self(value: 3) } }
Ukax required
: final
Kunjamatixa required
amtawixa mä qalltayiriru phuqhañapatakixa ch’amanchañawa jisk’a clasenakanxa, naturalmente, herencia jark’añaxa final
aru apnaqasa mä qalltayiriru chimpuntañaxa wakisi kunjamatixa required
ukhama .
protocol Initable { init() } final class InitableObject: Initable { } // ✅
protocol ValueInitable { init(value: Int) } final class ValueInitableObject: ValueInitable { init(value: Int) { } // ✅ }
Chika taypinkiri suma qhananchawi
- Mä subclase ukax machaq parámetros ukar jan uñt’ayañapatakix, ukax automáticamente taqi inicializadores ukanakaruw superclase ukanx herencia ukham katuqaraki.
- Superclase ukax
init()
ukampikiwa jan parámetros ukampi, ukax subclase inicializadores ukanx automáticamente jawsatawa. - Mä
required
qalltayirix wakisiwa, subclases ukan utjatap garantizañataki, genéricos, protocolos ukatSelf()
ukanakan apnaqañataki.
UIView () ukat juk’ampinaka.
Mä jisk’a arsuwi UIView()
qalltayiri jan parámetros ukampi, ukax janiw documentación ukan jikxataskiti jan ukasti misterioso taqi chiqanw apnaqasi.
Ukax kunatix UIView
NSObject
ukan herenciapawa , ukax mä init()
jan parámetros ukaniwa. Ukhamarusa , aka qalltawixa janiwa qhananchatakiti UIView
interfaz ukanxa, ukampirusa wali uñt’atawa:
@available(iOS 2.0, *) @MainActor open class UIView : UIResponder, NSCoding, UIAppearance, UIAppearanceContainer, UIDynamicItem, UITraitEnvironment, UICoordinateSpace, UIFocusItem, UIFocusItemContainer, CALayerDelegate { open class var layerClass: AnyClass { get } public init(frame: CGRect) public init?(coder: NSCoder) open var isUserInteractionEnabled: Bool // no init()
Ukampirus, capucha manqhanxa, aka qalltirix init(frame:)
ukaruw jawsi kunawsatix código ukan qalltaski ukhax jan ukax init(coder:)
ukaruw jawsi kunawsatix Interface Builder tuqi qalltaski ukhaxa. Ukax lurasi kunatix UIView
ukax NSObject.init()
ukan phuqhawip churaraki, ukax chiqanchasispawa kunatix method_getImplementation
ukax NSObject.init()
ukat UIView.init()
ukatakix kunayman direccionanak kutt’ayaraki.
Honorable mencionanaka
Ukax mä init ukhamawa
Mä init failable ukax mä opcional ukar kutt’ayañakiw
final class Failable { let positiveValue: Int init?(value: Int) { guard value > 0 else { return nil } positiveValue = value } }
Enum
Enums ukax mä raw valoraniw mä libre init?(rawValue:)
enum Direction: String { case north case west case south case east } let north = Direction(rawValue: "north")
Ukhamaraki enums ukatakix mä init costumbre luraraksnawa. Taqi enum inits ukax self
asignañapawa.
enum DeviceType { case phone case tablet init(screenWidth: Int) { self = screenWidth > 800 ? .tablet : .phone } }
Qhipa uñakipaña
Swift ukanx taqi kunatix inicializadores ukan wakiskir amtanakap uñt’ayawaytanwa:
Mä inicializador ukanx taqi yapunakax phuqhantatäñapawa.
Opcional
var
propiedades ukaxnil
ukaruw uñt’ayasi.Estructuras ukax mä inicializador miembro ukan inakiw katuqapxi .
Miembron qalltayiripax chhaqtawayxiwa kunawsatix mä costumbre qalltayirix qhanañchatäki ukhaxa.
Mä uñt’at qalltayirix taqi yapunak phuqhantatañapatakiw uñji ukatx
super.init()
ukaruw jawsaraki.Mä conveniencia inicializador ukax qalltañ simplifica, mä designado inicializador ukar jawsasa.
Conveniencia qalltirinakax sapa kutiw horizontal (
self.init
) sarapxi, ukatx designados inicializadores ukax verticales (super.init
) ukaruw sarapxi.Mä conveniencia inicializador ukax subclases ukanakatakix janiw utjxiti, jupanakax machaq propiedades ukanakat yatiyapxi ukhaxa.
Mä superclase ukan conveniencia inicializador ukar kutt’ayañatakix , taqi uñt’at inicializadores ukanakax chhaqtayatäñapawa.
Jakhuwi jisk’achañatakixa, mä conveniencia uñakipaña qalltayirimpiwa apnaqasispa.
Mä subclase ukax machaq parámetros ukar jan uñt’ayañapatakix, ukax automáticamente taqi inicializadores ukanakaruw superclase ukanx herencia ukham katuqaraki.
Superclase ukax
init()
ukampikiwa jan parámetros ukampi, ukax automáticamente subclase inicializadores ukan jawsatawa.Mä wakiskir qalltayirix subclases ukan utjatap uñji, genéricos, protocolos ukat
Self()
ukanakan apnaqañataki.UIView.init()
ukaxUIView.init(frame:)
jan ukaxUIView.init(coder:)
ukar jawsatawa.Mä jan walt’ayat qalltawix mä opcional ukar kutt’ayaraki.
Enums ukax mä raw valoraniw mä libre
init?(rawValue:)
.Taqi enum qalltirinakax
self
asignapxañapawa.
Aka qillqatanx mä aski yänak jikxatapxañamatakiw suyt’askta. Kunas jan qhankiti jan ukax jan chiqaw sañ munaschi ukhax Telegram ukan inaki qhanañcht’añatakix jawst’apxita: @kfamyn .
Uka tuqit wakiskir enlaces ukanaka
- Uka Swift Programación Aru (6) / Qalltañataki
- Swift in Depth ukax Tjeerd ukat 't Veen
- Telegrama - @kfamyn ukax mä jach'a uñacht'äwiwa