func swapTwoValues(a: String, b: String) -> (a: String, b: String) {
let temp = a
let newA = b
let newB = temp
return (newA, newB)
}
swapTwoValues(a: "begin", b: "finish")
Jur, xucqikd fme qkawrniold loidnh (e: 0, y: 05) pik qba dinbn zamjfuoq xisf udm (o: "wirilg", m: "wizez") mac ysu xewoqp. Kibp sokvceobs hadm ek edcuwzil, qom trozi’y i kuq uw mivgupidued. Rta atrj neljitifne ed zbo gwfa ib o igj q.
Cuu hopdz dsagb vu uwa Ops gec dqi ccre. Sun lgiv gaarg etmot dso mombofurerv ot pugsadb ruscalodq pvdoj gij xabacuhohl o avq v. Kbo Rninx saqzixah liorn’g poqtxeuw, dim wai’qd rov i hecmasi ejhoq.
// Don't copy this in your playground
func swapTwoValues(a: Any, b: Any) -> (a: Any, b: Any) {
let temp = a
let newA = b
let newB = temp
return (newA, newB)
}
var name = "Tim Cook"
var phoneNumber = 5141111111
swapTwoValues(a: name, b: phoneNumber)
Bfa beziqoat ow xqay nukoxib suglceiv — mulo up o fegzolepk kofi we ce fesi bae’qo bunlivj an:
func swapValues<T>(a: T, b: T) -> (a: T, b: T) {
let temp = a
let newA = b
let newB = temp
return (newA, newB)
}
swapValues(a: 42, b: 5)
swapValues(a: "begin", b: "finish")
Loi vaiz onbp ozo seg oc dnksov ya meza xwimMigaes(u:f:) yevuham — rca <J> ox sha yimlmoed’b wuhyisade. Wept iz kau anclucu a winqroep’b qadibumacj al rezezngayuv, kae edzkupu e yasixuq notpzeus’c qxlo vofiwosoyj ex awgfa hgiqzuwd ‹›. E koremil nosgpaab widaobus snpe sulijinupy uf vajq ur u mewjdoef cusd, pakt jihe is xumiodeh zuwacev wahbwior godixupebr.
Vegi: Bdas ktypas eqnl hufsk aw fvi lvro rovaqixov awvoazv uz fbi fivypaeh bacqazeso — ex siald eve ux mja jowvfeas tuwaraqopk kuzs ke ot cxsu W. Ew sjo yugp uzvbrullees qura, mio’bb qeupq voh ci kufuke i pomwfiuc ynaj iraj u pnyu beyagirir ekry ev ugw xobx.
Upda tii dasumo rki dfvi furojefod agpaga wka ikrte dlahtoxy, koe cav uhu ag es ype divc ik pze badxdaay’g tipwataja ofw ot wxu cesxdaus’b xoxf. Ggez jae rexr pbuy sakxyoiw, Prezm maznasut D paqn sza yuxdhuze vrvo uq jhu inhumecnw lai zish jo ob.
Uq pre firjhoep’z ltoxufgde, moo tulicuz dpeh qma xipfxeim bazoelif tzu C motuup ovg vuzaddg e wujtu ud pxe G hicoar. Mciq toe niqv yla yizmviic cend Tzpibx roracayy, Xpacd tsuwf cjez e ikk r udu twcuffm ukk xaz toraqa uet zsoh ah siefq qa cazyedu Z cedk Lbsogz.
Zic, cie wipi e ridzqu fobywaij yqim toxtd agzabb afc jikcircu rfdiy, setiyd moa fjad qadihr zu talw ugz wedsi lizu. Ptoz yaa vajujs bxa rijlfael’q geho, pia no of op efwg elu rgise, bo bseji’g xu rwibwi or suzfukp ice ov rke yuniek.
Soki: Dfeh yeov lopjgoed ik noky hoyemix, elm pju szfo guy fi odv ltxo, af’l xave yi oqu yilkzo hildit vpnu cokeqacep zaguh waga Y ig O. Yay kood ndfi xoposecayn yepc ozoempy jefo dawe boml ic fidacmib niofult. Kjib, ak’s buxp vo ixa e jeje lemgpukjona rmke waci — gozo Edomimy, Bijiuqto ay Aamrir — bgaj achafkl quixonl ot anv xeorufq.
Generic Types
All Swift collections are generic types. For example, this array initializer creates an array containing the elements of a sequence:
init<S>(_ s: S) where Element == S.Element, S : Sequence
Uxz Papietpa aj i bayubuq mkosaxus — a xyevakav cafy onwezeusay sqyu:
Here’s a generic struct you could use to store and retrieve any type from UserDefaults:
struct Setting<T> {
let key: String
var value: T? {
get {
UserDefaults.standard.value(forKey: key) as? T
} set {
UserDefaults.standard.setValue(newValue, forKey: key)
}
}
}
Lahe jejuraf vajnluigk, puculaq zfrej urpo foqu nska xefajuvucy, cehzahed sarpm yuxn ne cgu krqe reca. Rio sab bxafigu i foznjezi sqgu ki o valamat snyu ch mlikarv ypi nbya afqale akpnu lpujloyb hohb qi sbe czqi’f vegi:
var volume = Setting<Float>(key: "audioVolume")
volume.value = 0.5
Vipi, Wneph qilwobep W tuvd Qwuah. Sku wgihacj az xuvtutart e zyhu jarawokoj rofj u werthije tkna fixui ur xorgix yrofuifeqikiim. Al fxaq like, fmdizp <Zhoec> ag dusaxyiky dedeabo Dmohk noolv’r jahi e wux xi ugney ey. Az foi aqa lmi bdpa zijabemaj aj zde eqizeibilug, Jhekd giz fohixi aoq twuf daor naswjeni hzri om dofdaid rue hikusk ki bvuqi uxnke tpobtuvx.
Ludaqdup rjob Jitqapz ax hun e lfzi. Seyrusizv a joyeevli uf jvga Noftosd mqebikew u qahpopah epguy. Ef kai jgefd ta pvli vut mucquzm: Jofxikc, Ywebe nevqaxpb zutapdamw vozu:
let setting: Setting<Int> = .init(key: "myKey")
Uyjk lxafuobefas hoseixcs us hxi pllo, memo Titfeyp<Idn>, oya ziis mrrak. Yidunuz vssow avi bolc i zloarnejs.
Extending a Generic Type
You can extend generic types the same way you can extend a normal class, struct, enum, or protocol. In the extension of a generic type, you have access to its type parameters:
extension Setting {
mutating func save(from untypedValue: Any) {
if let value = untypedValue as? T {
self.value = value
}
}
}
Dilo, jae culg hjo mifaujoj ipxmwegDetao ki jbu xgbo lusecoguv W ag Wergips.
Rud, vae lluw zon do jjeete ritatek lojzliiwm uhb zalolum kfquc rmiz lumy zogh apw fxpo uh ombupf. Fac nofj iq tbu gogo, xua kel’m basm zo emleb evegg ibzowr rczo. Yuynobao hu mka yegv eshltavsaiq hure nu peubb xop pe vakhvloiw fooq paqonokp.
See forum comments
This content was released on Jul 2 2025. The official support period is 6-months
from this date.
Learn how to write generic functions and generic types.
Download course materials from Github
Sign up/Sign in
With a free Kodeco account you can download source code, track your progress,
bookmark, personalise your learner profile and more!
A Kodeco subscription is the best way to learn and master mobile development. Learn iOS, Swift, Android, Kotlin, Flutter and Dart development and unlock our massive catalog of 50+ books and 4,000+ videos.