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 amuytʼasajja, jan waltʼayir pantjasiwinakaruw puriyi, uka pantjasiwinakjja, jan sum amuytʼasisaw jankʼak askichañ muni. sum 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 jawsañax janiw sapa kutix mä designado inicializador ukanx wakiskiti super.init Kunatsa mä subclase ukan taqpach yapunakapax janïr ukar jawsañkamax phuqhantatäñapa super.init Kunjamas taqi awki tayka qalltayirinakarux jisk’a ch’amanchawinakampi subclases ukan mantañax Kunapachatixa chiqapa mä ukaxa wakisi required Kunatsa ukax sapa kutiw jan parámetros ukanakamp jawsatäna, ukampis ukat ukax chhaqtayatawa UIView.init() init(frame:) init(coder:) ...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 vs ukax var let 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 qalltiri: genéricos, protocolos, , required Self() final ukax mä parámetros ukaniwa UIView() 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 (ukax, chiqans, muspharkañ uñt’ayatawa inicializadores ukanakataki) akham siwa: The Swift Programming Language (6) 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. Initialización Aka qalltañ lurawix phuqhachatawa 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. qalltawinak 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ä katuqapxi, ukax compilador ukan luratawa. Ukax irnaqaski . miembro inicializador ukar estructuras ukanakatakik ukar ajllisaw kunjams uñstaski uk uñjasma: Refactor → Generar inicializador de miembros 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 ukax janiw phuqhantatäkiti, ukax mä pantjasiw compilación ukaruw purini kunatix . isBlocked taqi propiedades de estructura ukax mä inicializador ukan phuqhantatäñapawa vs Opcionales, var let Mä yapux janiw wakiskiti, ukax mä ( ) ( ) ukhamawa. Ukhamächi ukhaxa, yapux ukar uñtatawa : qhananchañax variable opcional ? var nil 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ä ukan qalltayirir uñt’ayaña . extension 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 yapunakax Opcional var nil ukar uñtatawa Estructuras ukax mä inicializador miembro ukan inakiw katuqapxi Miembron qalltayiripax chhaqtawayxiwa, mä costumbre qalltayirix yatiyatawa ukan mä costumbre ukar uñt’ayaña Estructura ukan miembron inicializador ukar katxaruñatakix, mä extension Yatiqañ utanaka Uñt’ayata qalltawi Mä clase ukan nayrïr qalltayiripax . Ukajj pä amtaruw yanaptʼi: uñt'at qalltawiwa 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 ukar jawskasax . Ukax kunatix superclase inicializador ukax subclase ukan jan walt’ayat thakhinak jawsaspawa, ukax jan pobladas subclase propiedades ukar mantaspawa. super.init phuqhantatäñapawa 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 ukar uñt’ayasksna ukhax mä pantjasiw apnaqañ pachan jikxatassna kunatix inicializador ukax clase ukanx uka lurawiruw jawsaspa. Aka lurawix propiedad ukar mantañ yant’i, ukax janiw jichhakamax jaqichatäkaspati. self.breed = breed Animal Dog getInfo() breed 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ä 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. conveniencia inicializador 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 jan yäqasa . taqi superclase ukan uñt’ayat qalltayirinakar 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 inicializadores ukarux chhaqtayañaw wakisi. pä 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ä ukampiw jan lurasispa . conveniencia override initializer 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. designado init sasin sutichapxi uksat sipansa. Uñakipt’aña kunjams conveniencia override initializers ukax self super.init Aka k’arix 5 t’aqapanx Tjeerd in 't Veen ukan 5 t'aqapanw sum qhanañchasi, uka librox nayatakix wali askiwa. Swift in Depth Chika taypinkiri suma qhananchawi Mä taqi yänakax phuqhantatañapatakiw uñji ukatx ukaruw jawsaraki. uñt’at qalltayirix super.init() Mä qalltañ simplifica, mä designado inicializador ukar jawsasa. conveniencia inicializador ukax Mä subclases ukanakatakix janiw utjxiti, jupanakax machaq propiedades ukanakat yatiyapxi ukhaxa. conveniencia inicializador ukax Mä superclase ukan kutt’ayañatakix , taqi uñt’at inicializadores ukanakax chhaqtayatäñapawa. conveniencia inicializador ukar Jakhuwi jisk’achañatakixa, mä apnaqasispa. conveniencia uñakipaña qalltayirimpiwa 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 ( jan argumentos ukampi), ukhamax subclase ukan qhananchata inicializadores ukar jawsañax wakiskiti. Ukhamächi ukhaxa, Swift compilador ukax jawsañx utjki ukaruw jan arsuwinakampix uñt’ayi. init() ukax janiw super.init() automáticamente super.init() class Base { init() { } } class Subclass: Base { let secondValue: Int init(secondValue: Int) { self.secondValue = secondValue // ✅ without explicit super.init() } } Uka chimpux apthapitawa kunatix ukax implícitamente jawsatawa. Ukax yaqhip uñacht’äwinakatakix wali wakiskiriwa. super.init() Mayita Mä qalltayirix taqi chiqanw apnaqasi, kawkhantix mä subclase ukax pachpa qalltawimp chikaw base clase ukampix utjañapa. Ukhamaraki ukaruw jawsañapa. Aka amparamp qillqt’at uñacht’awinakax kawkhantix mä qalltawix wakisi. required super.init() required Genéricos ukanaka Mä genérico tipo ukan jawsañax mä uñt'ayasakiw lurasispa. init required init 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 ukax janiw kuns yatiskiti subclases de ukanakat. Ukhampachasa aka particular tuqinxa, ukax mä ukampiw jan parámetros ukampix utji, amuyt’añäni, machaq yapu uñt’ayaspa ukhaxa: Factory Base Subclass init() class Subclass: Base { let value: Int init(value: Int) { self.value = value } } Aka chiqanx, janiw ch’usat ukanïxiti, ukhamax kunjamtix ukhamarjamaw yatiyatäñapa . init required 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 ukan uñt’ayasktan ukhas compilador ukax jiwasatakiw uñstayi. Uka tuqitxa aruskipt’asiwayi. Uka ukax automáticamente herencia ukat satawa. Subclass required init Compilador ukan yanapt’awipanw required init super.init() 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 janiw , subclase ukax janiw obligat ukhamäkiti ukat inas jupan qalltayirip qhanañchchispa. init required 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 ukax janiw . Base.init() 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 qalltayirir jawsañax métodos estáticos ukanx utji. Self() 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 amtawixa mä qalltayiriru phuqhañapatakixa ch’amanchañawa jisk’a clasenakanxa, naturalmente, herencia jark’añaxa aru apnaqasa mä qalltayiriru chimpuntañaxa wakisi kunjamatixa ukhama . required final required 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 ukampikiwa jan parámetros ukampi, ukax subclase inicializadores ukanx automáticamente jawsatawa. init() Mä qalltayirix wakisiwa, subclases ukan utjatap garantizañataki, genéricos, protocolos ukat ukanakan apnaqañataki. required Self() UIView () ukat juk’ampinaka. Mä jisk’a arsuwi qalltayiri jan parámetros ukampi, ukax janiw documentación ukan jikxataskiti jan ukasti misterioso taqi chiqanw apnaqasi. UIView() Ukax kunatix ukan herenciapawa , ukax mä jan parámetros ukaniwa. , aka qalltawixa janiwa qhananchatakiti interfaz ukanxa, ukampirusa wali uñt’atawa: UIView NSObject init() Ukhamarusa UIView @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 ukaruw jawsi kunawsatix código ukan qalltaski ukhax jan ukax ukaruw jawsi kunawsatix Interface Builder tuqi qalltaski ukhaxa. Ukax lurasi kunatix ukax ukan phuqhawip churaraki, ukax chiqanchasispawa kunatix ukax ukat ukatakix kunayman direccionanak kutt’ayaraki. init(frame:) init(coder:) UIView NSObject.init() method_getImplementation NSObject.init() UIView.init() 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 asignañapawa. self 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 propiedades ukax ukaruw uñt’ayasi. var nil Estructuras ukax mä inakiw katuqapxi . inicializador miembro ukan kunawsatix mä costumbre qalltayirix qhanañchatäki ukhaxa. Miembron qalltayiripax chhaqtawayxiwa Mä taqi yapunak phuqhantatañapatakiw uñji ukatx ukaruw jawsaraki. uñt’at qalltayirix super.init() Mä qalltañ simplifica, mä designado inicializador ukar jawsasa. conveniencia inicializador ukax Conveniencia qalltirinakax sapa kutiw ( ) sarapxi, ukatx designados inicializadores ukax ( ) ukaruw sarapxi. horizontal self.init verticales super.init Mä subclases ukanakatakix janiw utjxiti, jupanakax machaq propiedades ukanakat yatiyapxi ukhaxa. conveniencia inicializador ukax Mä superclase ukan kutt’ayañatakix , taqi uñt’at inicializadores ukanakax chhaqtayatäñapawa. conveniencia inicializador ukar Jakhuwi jisk’achañatakixa, mä apnaqasispa. conveniencia uñakipaña qalltayirimpiwa 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 ukampikiwa jan parámetros ukampi, ukax automáticamente subclase inicializadores ukan jawsatawa. init() Mä subclases ukan utjatap uñji, genéricos, protocolos ukat ukanakan apnaqañataki. wakiskir qalltayirix Self() ukax jan ukax ukar jawsatawa. UIView.init() UIView.init(frame:) UIView.init(coder:) Mä mä opcional ukar kutt’ayaraki. jan walt’ayat qalltawix Enums ukax mä raw valoraniw mä libre . init?(rawValue:) Taqi enum qalltirinakax asignapxañapawa. self 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