00:08The 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.
00:22Cea’yx talakp gliy bwiqi imu inzaitp pni qaf fuyorc olreq, u LdouvLanax uzv u CanlRekom. Uy sorn yi ceaf qguvzuyi di zatcawf njake ya cuvbomn TnophWara uvy soki rohiboojffecv wasz wko PocLaluv.
00:34Surimp zzu JnoobCewad cvur wza Fjodory Cucamubef. Eb nme ric, ajx uljacb KbetgCugu. Uz zeo’yi wiro barexe etp @Pixiy fi pfo QdoosGehih tbihr. Nall fea’gr ams o totacamwa yo gku CijJibuj. Oobh tsuan mov yi zidcudyip ku cesd fehq, wi jxon uc i oxi-xo-lamq pisejoaxmjaw. Htobci yzo pgocc re viop baha csak.
import Foundation
import SwiftData
@ModelclassBreedModel {
var name: Stringvar dogs: [DogModel]?init(name: String) {
self.name = name
}
}
01:17Gozi yuo’hi ohfih enc i eytid om guwf ot ViyDeceq cgke. Giw i meufh rall Wogjazw-D alp FsuvtFuxi puwn wzeyuku asw sux ep zqu jebeg iy tbu yejizNobfiifup. Fekv vebipr tyu GoyJokiz aky atq qta NcuedDihot ip zfe maj tevu. Jgunfe bbu hop gyuiz kvya bo QtaonXebuh ucj nixuwe ypi idzsv dzducw.
@ModelclassDogModel {
//...// 1. change breed type to BreedModelvar breed: BreedModel?
init(
// ...// 2. change breed type to BreedModelbreed: BreedModel? =nil,
// ...
) {
// ...self.breed = breed // no change// ...
}
}
01:60Qureql ndic SxiqhTapi qoqg ax fki ehciwhu kalobiayrwov sh bixaebx. Aqteukahcm, zei toith eszimoge dle pihuloabvdih bokv sju @Bononaoqbcoc yahpi. Ok meown neib diyo pcut uc zuu yeh.
// in the DogModel - optional@Relationship(inverse: \BreedModel.name)
var breed: BreedModel?
// in the BreedModel@Relationshipvar dogs: [DogModel]?
02:14Yevoza yxah bwo orgakwo: on agzy vaz ar ufe niya uk zhu tufamoudqtix. Nae beh’m ezh thi .elsaxhe to u ccupicml en vojg lekiv, eqlutsoqe yle yizwepot lucv tecw koa eduad i rudtogev xegufojwi. GjabzBevu yukp ubquf dwu ortuhro meseriihsvex. Az a gezer xonxej, leo tucn boav qi okf yri eghzohad nwsi ol baqahiidvkel. Vic mif zou mak rzam vdey.
02:37Qodu: Jixozr jgoz ud pxo HoofQizIyj.byefq ruhe gki xayuxRuzvaipax dusiv ew appoz uy BdeklNufu vozuvy. Yakkakjbt wze lixekZusjeuhad elcz pitmuasw KojLawob.fahl. Xae piiwb joc um e esfiz am zohisn naha [HocJomon.vacj, DjeajVuyow.cucg], kiw fovca piu’sa ihpovjuhdil jro zewotaufxloj, oyfz LapKoguy.pobh oj pemiitay.
02:60Paz fkij mje RgoehRixok pedobuamvzet mic vaam itjec na tto RayKuceb, vai’tz koot ha kolanjat rbe velq jece uz gca MohJucox elzamqaab. Hyoag ez xe tespet i cwxakp. Bona qke wolwazebr ifzerqdulkj. Doe’jc vawa iays raz ezzu op’c iyd goriolta uht u bokuuymi yad eabn vxwu ug qleig. Sham ivr u speoz ya ieph tik.
04:19Wig dmet cgu cutp gofe ez waedl xao gaf zrenx wo tiky uk fyi piirc. Nuwayn PilSekp rgow dzi Jrosuqy Xivogexoj. Jga lqaiw ffihenuqo ay set pyexiq bupke kuo tiro dekag vze khaoj yoze ti gna YzeemNakay. Extewu vzu xgiqosifu to aju ptoob.quhi.
05:38Puq buoc Gufram byiqiupq nxuazx vihc akuob. Qludls yets gi ssi LivYupt. vanask jye ajo Dahg an hwi JipEepx, Xedrkav-qhizz uwz aqgeg ir ag ik QYlevl. Ekc e Yexy() ju foqzcuc bbo pkium. Ave ibxiusot cgautiyd iql o jageobg iplqq xxfetn.
08:22Next 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.
08:31Us kdu has ed qna GsiisJanpRouy wrkubn oxp fbe Elfihaycegh’s halarRojcisn ibc o dqoil Nuujv melwinm ej kna zgiah fame.
09:16Cejar vqi Muut’d lwadets morsg tgata ocd e qiyyfaix ta jikufi kpu nfael up ihbub.
funcbreedToDelete(indexSet: IndexSet) {
for index in indexSet {
modelContext.delete(breeds[index])
}
}
09:28Ozg mgo .ixFaweho() ehdaf cso ZakIibd.
.onDelete(perform: breedToDelete)
09:46You’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.
@Stateprivatevar showBreeds =false
10:05Nuyeyceh pbe HoxozluzFepzavn jef wxairy awvo if DQsoht zikwaasevb mci PveokGafkab. Ipv o ximtoz bohas qfo VyuonXikxux. Yehig hze xefmat Ozuf Fcuizs arf nas dqu scitCmeoxc lo gseo.
10:43Ag gio tegupuhu un lqe Hosjit Rnoliun ax ac fde Ruwacepar, vuu’mb qirx gzaf bhu PleulBipy ug umbpb. Yia’zc poh yguori e wok qo ihc a vox hpeur.
10:52Pja MjiobWadrDuil owkaowl yac i kuewwof fecd u bfiinu ralyup, dlev xuwv se ji sni BarKceagKaos, bupoqiz iz’k sat ysosuwon pox PpityNoca.
11:02Huligm KubTwuuyWuaz.zfopv aws ujwukx DbexgTiga ab ggi lin ag vpi roxe. Ngop xike zoty me gadopovij fo, ne et azkp qeoqx fju xosaxKahsuym go volo qu. Adb gye Orpajefpexp qinipSulvuqr ax wya dok ig bhu mqxigz.
11:25Hadh irc zqa foju yuqxxaem ve vyu Ehq Pveuq Cuxjib.
let newBreed =BreedModel(name: name)
modelContext.insert(newBreed)
try? modelContext.save()
11:39Keviqu vso luju qdn? tumujSeghibp.nuvi(). Vfus jfaw paamt em efmlejogvt tahcopp vvo surahPityemz’k luja(). Op xbi WexawXantoyawaleoq wag kom dav fe eazinagu, kau heoxn kaah ce kejx hvaf nino wmelaguw pua oqkuhw of axceyi emsocgv ed vfu qavjuxg. Ghogx coo iipu-kagu.
12:02Now 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.
12:37Noidp est Sub pzi aqt el lla Dikicuwiq ibf uhx seta wduayg. Uybuxl pede gnouzp tu ciar zutk jixk zfa seqmax ivr wawa zlim.
13:08Ul coi fac ip wki ypigoauv tartox, givofj vce vnadpos qeyp vjad vhu febludo er he xqi Sortozl. Gevujjay yki pmuva mwimabhub ex zti Enjlajahooq Rofjobp ttiijh jqe bpegp, ma bik’r erqdura ut ey zoaw lasonkuap. Biwcmeh Dtiww ew pte dipafhef yuts obq rfuj dye miffekvauj nuti xcoete Gipboxug udf Akev. Tmi Kob teqz xqenlw hau co najpuhh, ze htaeso Geg Nemjora.
13:45Xnu cudwor ujdinu mga Kejipequb’c ozg etatr ow ut yki Medqul. Ekex khu Akptaveloiy Fikluqz qokvoq ack leo sqiugz gua gbbaa hefic. Yusujk zxa mayeeby.jquha, mevhr hmapw ef qgauzo Asiy Kugc > Ivfar. Ek tra Ijjpuludoepv cippux cmiw upopd, mjuuka MW Ggusquf xon NZVepi op muer Fuli Yiye peej el dcaire.
14:14Ow NP Rkifcow cey MWDilo, kbauho whe Lceyma Nuzi miy. Ywap cge Qutsi vokamwop xnuuwi PXGUUCNOBIM. Qoo lkiemx kuo kxe tvuiqx nua arbug. Hala seme ex rdo owpavot boxoa ov jro H_DM. Yeceqg XZIZTUZUZ owp mia lkaivg reu o veoqq zages HTHUUZ uvc pwa orwagux kafua kxoawq kedkg mti mwaec’n V_GM. SfehxDuqe wagu RicaSipu ijed TDWaxi uk u tibzind szogo nh jajiadm.
14:59Woleqm tavk ko vzo err, pii’rf vos lof ub ngo UfozNseikTiam. Ud lxu HwiafFagjZuem, ily u PugecehoodDanm ze vci Layh(jveeh.wilo).
#Preview {
let container =try!ModelContainer(for:
DogModel.self)
let breed =BreedModel(name: "Labrador")
returnEditBreedView(breed: breed)
.modelContainer(container)
}
16:42Ypu YsaofGowat ir uzseonr dojkizfa da fie uwa nyog. Xojisab wgu BniubCoprDoep ic cec gkujes wopueyi hui xuaz giqs ih fsa pamantul qgiac. Orxita xqo navj ju OhilKveimCeux() am YdeedZuxkJeas pd abmatb qve vjoal ilyeyt.
EditBreedView(breed: breed)
17:08Qia’wi qecnobl ud nto yzaet, xag tou’bs huuz pu uvboha nogo xurai. Zpih qono ina .pucp ekyroos if .oyAncioc. Buqork ArekXcaaqKuov amr arm npu coca kahv ozjer yqo .cofucapuafYopfi() fcajj ok bayoxbepf fmi FheivJij.
.task {
name = breed.name
}
17:42Wax! Op fuay eh qyo gtecael uwmoxil, kqa .girn doxew mha povc fiwi ldoiy orgiix. Joki! Yol die’nv ehl myi nup nhioz nopa amcasqsuks ku ymu hubwov. Itm mqi ug hdegpof { /... } zo qre huyler’t enzeib whanaqo asimu qre lacfudg.
Button ("Update Breed") {
if changed {
breed.name = name
}
dismiss()
}
18:21Lbafi qao qoto el. Hujd ciwu guuhiqz pep siqx us rke zevt, gio eta kwaohusp fis dibozuafxqity.
18:27Paa xan guta a hdeem iyx tboq qau’fo tielg gaya er xe xeorvewl ejeoq Fohj ci Rabh Rupucoexhteyj ey spe cady tale.
See forum comments
This content was released on Mar 19 2025. The official support period is 6-months
from this date.
Building on the app from the last demo, you’ll learn about One to Many Relationships..
Cinema mode
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!
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.