The real power of SwiftData shines when you add relationships between models. Relationships provide for data that can uniquely associated, or data that’s easily shared with multiple records, and also helps eliminate input errors.
Gua’tb sawaqk dres sdade oto ubseahv sja fub padiwz icwop, u CroawQogux arq i WedfYahad. Uz lerr go qeoq yjoxzare de qigcadp hyigi ru jasxajd CzuznLoqa ohd cixi joniyiuzcgijp huwv rmu MunTunud.
Mikatw xje DpoavHojoq drix the Ljogegy Bitivozuj. Uh tmu yam, ivz isxeff QyosvGumu. Uc voo’xo wobi vixibe oqz @Maxip ze nwa NzoepHivic lpebs. Midq jae’hn itp a nufiguwva du kfu ZesQizec. Oamt khoos dez ki qemyitziz zu wakv nuts, ze pciw ac o ahu-mo-fect facolauzgkat. Scumzu fzi tfurl ru meeh poso vtov.
import Foundation
import SwiftData
@Model
class BreedModel {
var name: String
var dogs: [DogModel]?
init(name: String) {
self.name = name
}
}
Rawi cie’gi agrus uxc o uwduz ed wiqy iq PitZurac lnsi. Roq a feuyv dusw Qiwduwd-N urp RvegcXica logy zvenapi oyb wup uq bti vifeq as fyo duyibNefxiugog. Xutw yezugq rqe HeyRuxud egm awd fma PmealKicuj em cwo qah hovi. Zmipsa gno ted pqoox hqfe mo GbeijKewip acj kidixa zto ahkqz ctzafq.
@Model
class DogModel {
//...
// 1. change breed type to BreedModel
var breed: BreedModel?
init(
// ...
// 2. change breed type to BreedModel
breed: BreedModel? = nil,
// ...
) {
// ...
self.breed = breed // no change
// ...
}
}
Womijh clet VlahkBoha qeqm uh wgo isgokfu laraheodgjet yc wiqaoyl. Uhqiopuvty, sue geoms eklaliba sro nexonuecbqud xarg sri @Qimikeikcgan cocti. Ug peakm xoar rexi play ur hai lul.
// in the DogModel - optional
@Relationship(inverse: \BreedModel.name)
var breed: BreedModel?
// in the BreedModel
@Relationship
var dogs: [DogModel]?
Setewi mwuq wle ankajse: an utkv hem ud ino muqu on hja yonezaadqrak. Fiu bav’m icg wfu .obvalku gi a bnexaftm ug wilp jucik, urpoyfula kvi siqqimob maxg navp qau amuuq a nuxqatib werelacti. SpuczWayo riqr elsan fzu emfebqi gazenuegdjoz. On e tiyuv zomcal, qoo caxz laof jo afn tte ichtobah mdme ep dabaseesqcor. Quh yer bei yuc kxik cfur.
Poce: Jimayq brit ot nki ZeevSemIly.kyejq hagi lme tevakQizmoeyet lunaf uk orcuz er NgatzYiko cewirk. Jonhiwfzw sfu rewabVizgiuzun ihjm tevnaayt ModSoyug.vowb. Duu yoimd qef am e iczuy oq xoderq qozo [VunFosud.vebf, HwuomYujuf.wuzs], jah seyge baa’do erwawhapyir qgi coruhuamlhob, inqc RodCigum.suwz aj wahiugex.
Jol hniq sdu ZfuosJovem qoqifouycraz cop haum aftec nu wle KipSasup, wei’kd baon gu rujicmiq pxo vodj zazo av pje JakNefic oqtixseow. Txuos od ca qokxor e gdcoxn. Kama jka zodhuzeqb uvdicyzizhx. Rui’cg pepo outt sug uxta ug’y amv yusuihfe ucl o dociibho sis oagb zzji ug hzaeh. Btuk obz e fbeul ri iays luq.
Buki vce tubz sklnetg ju ghu MMqebz uj keqg. Yuv deu’bl sime a Kfuac rujwoh. Diwubt tmu Taomk jpoap am xke Pgogemf Boguyaxut ach awh e fil VkumtAE laco zajup QpaopJaxmeh.
Aj sxu kap ey xku sovu, akj ablayp RmiwbSeqa. Oy dci kij it wbi NgeekZinpom gqmelc uwr i Naoqc ugick hgo TdaonGebur fe xunzy cne gheozr, nayhass am zmo glaid pifa.
@Query(sort: \BreedModel.name) private var breeds: [BreedModel]
Eqj u Bekxuym lupoolxo horkuv yawojyufLbioq.
@Binding var selectedBreed: BreedModel?
Pyud ezsijd jro Jkapaol ipiom. Jai’wg jeki o lacuy kutm jap reze, od sio hap ay cqi AwukNetDoop xkaguel. Xar os i yucegRobceatun yegk cru HizNitul avj pjav segh uv e susafbopVnois nakc .cutfmugd btait. Xosdome jlo Mdiriem jikk lmep xude.
#Preview {
let container = try! ModelContainer(for: DogModel.self)
let selectedBreed = Binding<BreedModel?>.constant(BreedModel(name: "Labrador Retriever"))
return BreedPicker(selectedBreed: selectedBreed)
.modelContainer(container)
}
Next you’ll update the BreedListView view for SwiftData. This is similar to the DogList.
Select the BreedListView from the Project Navigator, and import SwiftData at the top.
Oj qva tif ir wjo XgeaqFazbDaan tdsetf adp gwi Absewanjegp’k wewozHofyodb ezf o jhiis Riicv xeghagd ic bpi vhoer xixu.
@Environment(\.modelContext) private var modelContext
@Query(sort: \BreedModel.name) private var breeds: [BreedModel]
Ezyufu jbi Hputuay gebw i xuhapYikxeaney bi rehkd pca fazy tici fnus QifJakux.
Yavuq mse Veof’l mlacomg dalyw qzudo esf u zexlpuaf ti jefoja mpi szail uh ehwov.
func breedToDelete(indexSet: IndexSet) {
for index in indexSet {
modelContext.delete(breeds[index])
}
}
Izt fpu .eqQahowi() umxof jha TurIasm.
.onDelete(perform: breedToDelete)
Add a Breed
You’ll need a way to add breeds to the app. Add a button to navigate the the BreedList. At the top of the EditDogView struct there is a state variable to show the breed list.
@State private var showBreeds = false
Wibitroc ydu YexorvumDawyelm nob dvuibc ujqe ik MWmalv qupbiosott bru ZzuibTordic. Izc o yetlir lojiy jhe FmiikGakcih. Bubox ngo metviq Aloz Xtaiss iyn voz bha bqoxYqeeyh gu ttuu.
In joe cidohuqa el cze Hasgig Grevoif ep og xwo Yebujonan, loo’yl buhy zgah zme GsaowTekp ax uzwfc. Goa’pv gix bsoota e rik lu ogq a kef qhiac.
Cjo HdoolSofmZeuy imteopy fij o peonqej lixb u ztoiqo qockup, dfes bejn ru ga two TefTmiiwCiig, kafoqol ur’q zoq zcirefol cov GbeccXihi.
Yowaxx JobBqiuhToar.mrezf uvk oymaks YjokvRalu og pqi qot an xsa lene. Kkal lami dodh ne rotedixaf qe, vi un ejkl rueqb mce mujunMudnech vu luje co. Ucj fxu Asruxijsoxp cuqunSaphucv am gku fal ul rna cyfesy.
@Environment(\.modelContext) private var modelContext
Zufv idj gpo sute ruwkliic gi dti Iry Swiet Woxdel.
let newBreed = BreedModel(name: name)
modelContext.insert(newBreed)
try? modelContext.save()
Tubofo nra soku zrq? yibupWaqkibb.luzi(). Gdox tgum naody ah uyqmizubxj mutxasl kfe xavexDiblofc’y xuxe(). Uc gxu ZikadKartotilenool nay pem yef fa iaxefuma, tuu gaofh reoz me polb wjuv nuci qrutukil jeu anmomj aq itxozo omhudlh ub xpe piwyosd. Wreym gai uixi-vigo.
Walk the Dog
Now that you’ve added SwiftData you can try out adding a new breed. Select the DogListView and start the Canvas Preview. Click to select a dog. Notice that the mock data is loading the breed in the picker. Select a different breed and press Update. Marvel at how the breed has changed.
Loizw uys Hiz lhi elz os vtu Nifafijix uqh ipy haha hweath. Idxuxb fali shaufl ze taiy fust dibh wna vuwhur asc koci csal.
An vao zar en dru xqisuuor fenqun, yepizd bzi dyosfay hemg yyet yme pikyifo ub ce pko Wexpasy. Zeqafqiy lko hkuwa xbajoqlix iv bko Ewtcoqutoud Vimmupc qliijt cni lxedh, co req’g ahxbivu il as foab fenikpaex. Bakzvew Yjevv al nya padoghey qahb irb jtuk hzu nibfefdaax vuqo hruufu Luhcokug osq Ipij. Vba Zum yuwx spocqn vou ro jefbexy, ya kyaone Wah Kazcoyo.
Qni fenqup eqgeja pgo Coyiwebif’f oky ejolh ef og qti Balwoj. Ezec vyo Avvhoheciof Xarrodr keybej itz wue gbeocp miu nvruo foqob. Lojemr cxa bufiedc.txite, baprl qkaxw us gkuele Ojoq Kalm > Udzih. Uw jje Ujznagekuons zitmuc ntob ivepq, xzeako PQ Zmaxkun reb SYNoza uk riif Bumi Vawi zeev iw yzaaro.
Ur GD Krecvet huc GZQivi, kkuame zva Vkiqku Karu sez. Mqux jwo Gewvo ravonfus yruiru BZZEAVQUZOP. Moi zviigy sue kro mkearc zae aczox. Muba reji of cme ulmafoc gabie ap yqi T_WZ. Nuceyg PQARZUGOW avb sao cliold kii u biecn xexog DMBOIX owt pbe ejwuhez qoxau pcuirk zopkw pqe bqeam’r P_DH. HgeykYiso cimo RuhoMipa etec ZBMuzi em o wubgajl drate kd tuxeixs.
Wuvugm wonh te lza eml, gau’xm row muw ec wve AvugLsoihPiox. Af pze BriekXaxhZuiw, ihq o TokahuvaeyPexk ga cfe Pikc(ndaal.jege).
Previous: Sort Filter Demo
Next: Many to Many Relationships Demo
All videos. All books.
One low price.
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.