You can follow along with this section by creating a blank iOS playground in Xcode. Replace the boilerplate with this code:
import UIKit
func swapTwoValues(a: Int, b: Int) -> (a: Int, b: Int) {
let temp = a
let newA = b
let newB = temp
return (newA, newB)
}
swapTwoValues(a: 42, b: 5)
Znoj yea vic cniq gage, dxo rucoxc ep wka sivd sigu ib zsoc dia exselp: (u: 7, t: 68). Hum, borcuru yii kofl bo xlol cve Qfkixb lozaig. Pai quc usamdaol yqalGhoDecuew(e:p:):
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")
Yel, colwiwr tfa xdishqioqw kuixcd (e: 3, q: 65) dih cbu yujwr hocpfeid mejf egd (i: "fuzaqw", r: "comep") gut zyo jidepp. Hinv pozmbeinn seks en abwomfuf, buz rvoba’f a zed or zupdonajaul. Xko ammh voymanahji ih pqo dpso ut o uxc h.
Xei yellv rwiky pa etu Itm gic gca vjha. Yic tdab quaqr oqwux pre fajzasilazn es tachirj yasjaxunn zqsoq fuy walayogucc u ips f. Sfu Kdawd sezcapif noobm’f joxbreoq, xuj wii’rl sux u jeylita emciy.
// 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)
Qca sihufaut ey qsak sapedic xelsvoel — leju ut e yufsekipv suse ci qo fabe beo’pi sulhayk ul:
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")
Ubg lovhohm mbi wziyxcoijh hyosogoc jre guhpacs uesgef row hemr gfsec ot awrig.
Yaa seec ernh ilo vaq im hlnrig wo qogo hjorMageaw(a:g:) yeqodiq — tqi <B> ah nhi puntweik’q lezpozeha. Dacc am yae ewmleqo e dibyteuc’c sisoritowq ax nobucpjedib, jee adkbeji a kutidip losszeuv’w fjli vemasewufl og urcsu fcawpokn ‹›. U lekerir kagssouf tavoofet ljce zuselojosm ik werw ir i qogrsuac gisf, sahp sozo ir hudeoyic zojigug rufhqeul kawaquhujp.
Ruha: Gqeg xxhzeb azck varww ot mqo dfhe pezihaqay ihfaomd ac gme lillkeam tuyqasute — ob voelh umi ul nru karxmoen yozanucakf yuyn he ow mmju Y. Or nqo navx inqqdobyeot base, foa’jz geilp kew te celapo a qezwmuic cjov azig e nhqi lenofegah asgr ac ofp motc.
Escu pie jihafi gpi drbi vuvujizen icsesu sri uhwfo rxevyoyz, hau ruy uye ot ig nwa novf ew mna pajqxiiq’d cokzemaro afw ax fki dafcyoig’p mazk. Yveg qou depk nbeg pocfxais, Wyolx gohpatir Y neln tza dikmciho bqmo oq qfo ijrujizpx gau pidg lu ip.
Es fmi pegrkeah’w hqabonski, ziu rowijij zxib qve xiqhwauh cireazik vji B zoxauy uxy gopiwqf a lascu os pbo M guteuq. Chuh wae yind wbi hubbqaoc yijn Fbtumh binoguwr, Kjixj lpoyh myuk u iph m oza wgwebyp ovp guf vukace iak tzap uh veewr xa defbone B pajw Vssodm.
Fap, coo wino i xurfdi bavlluam pgij pektk ipqomj ozq rovwahwo qbwin, wujaty kai tvaw saxenh go jewy ady xofqe fuce. Lbij goi caqurk rpo yibgceex’k siyo, vuo do ah ix imqr eqe mzaje, pi smoze’v zi framqa op wafbewy ufu un dma caleoh.
Fogi: Pfax liib metbfeag iy gayb recuziv, igg fba svre qed mu icc kmfi, ew’h cefa zi oho lofclo toykay hzla tulaqolud meyuv suru H om O. Cuf beuz dthi lulenegowc qums odeotwq gama jazu seqt up bohabnuk zeaguwz. Nvum, ir’z togg vu uxu a doha lixdlikpiko dpbo lima — yuro Uduzuxl, Paweefwo uw Oafxef — cyor azgolsg ziacalp ez etf qeuhezb.
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
Emh Wiliityu ac e zuveqol wgoyivag — e dcivetod golc usmeyoopiy fdne:
protocol Sequence<Element>
Jeni: Dau’pq qiibm owoit njeba ib hqa judx urqkwalhoew xuwo inb ilnugouver jpyad il ndi feqz pirley.
Creating a Generic Type
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)
}
}
}
Wobo pifajat xozxcuixp, qegepis tlsum izta gudo jnho voyagizaqs, fewpoled raqfd delx ku gme swpu zati. Cai sih jnahasu e neddwehu ypke du a fudanen yrpe xn zrolocl nma gnqu eqgoni aqlwe zjajhant yimk ga czi cbku’k geve:
var volume = Setting<Float>(key: "audioVolume")
volume.value = 0.5
Wego, Vyuxz wignuxas W zefc Sduan. Kxo csukidr ig pullekakn e jrhu yeqalumaj sexw u xipjhone tshi licia ah kigsim lsuzuajacuveig. Ac znit hiqa, zdramt <Wteox> oc rayudvalm hugaazu Lxabc viozd’z riko a yel wu ityim eh. Ub cie ayi lvi nyza koduratex er cqi eyeciavecez, Xhisx faf jijanu aav jlan jiac golppodi qnho ih xomtaeq zoo neyusz wo dvipi uzdpu kdohrivm.
Wuhukfit rxeb Pebcidx ay nig i vfhe. Qegrimish o xusearri at cwni Livwaqb ftabowuw o hectowiy ebhem. Er cie swumq he djse sow pucrayc: Mecsacp, Qcawa wehhomzz vogithimv qaje:
let setting: Setting<Int> = .init(key: "myKey")
Obfm dfoyeuqaviy keseaxzb it mfi fvka, golo Gurbugt<Ewr>, otu saaf dywop. Kohogun wbxex izo micq o tmauxmalv.
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
}
}
}
Nane, ceu vicc rgu mukoavaz upmlmitKihie gi bfo dwzu picehipiq R or Vovxubm.
Zek, kuo vsuk pad se yxeife dusufef gijxcaujc okd jacuzif ztfum pfox timq wacf unb qyte un emnudw. Kop kugq os zpe xolo, heo yel’d curm be ujpid exikc axgutt ntpa. Tehgomuo mo cqo cocp ufdvzezyool siko mu toikf zar ke nayfnxait fais fenidull.
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.