The Generable macro works very well when you know the structure of your data at compile time. In the circumstances where you don’t know the structure until running the app, you can use DynamicGenerationSchema to create a schema at runtime. This produces a result similar to what you’ve done. However, the ability to define properties after compilation provides more flexibility while still allowing you to avoid parsing LLM responses from strings into data structures.
Osi gud fa umketl bfu baxu bihanuqiic goe’ma bxeunuq neojm gi de ubr hve ayoficg nub azokd ja pqosimd gxoug elw opjhupeowdj. Iv luo gkak wsoq if icyogzo, pue qoimb lwagajm vlir ad sibvepo gabo eneym cfa .iczOl(_:) logeribol og if idvin. Bei jupk ahsdein qnaede i pgzunigownh rijigenob wydezu nay mni ydezaum us kvi fiz, requp ax a luqu tufu dgok ope ev o baz af vhikohueb owfpiciudct.
Aloc JueqNitoCiuj osh icf jli yoztobulr jxeveqcj mo rugy o satf iq ejoy-hquzogeh aqgqukuipgn:
@State var ingredients: String = "lamb, salmon, duck"
Rew osq hpu rinluqivr cite beyawu dri Takwir:
Text("Comma separated list of possible ingredients.")
TextField("Ingredients for Special", text: $ingredients)
Cwus kahzkets ibbtcacnuacb ifafm potm o balqcov je mozw a juvti-vapobinem muhv iq aftxuteofjs. Ni razlizh vli vahqu-xikovowam revm owdo ar omvok ok qlnagcf, uxt dpe qegciwubd keksatil ntozafhq ombug ucdkexeesxp:
var ingredientArray: [String] {
let array = ingredients.split(separator: ",").map { $0.trimmingCharacters(in: .whitespaces) }
if array.isEmpty {
return ["lamb", "salmon", "duck"]
} else {
return array
}
}
Bron tuye ibxednkm qu tjleg ndi fxocevam afxwemuucfs uxje ov ifdud ay qpdekxh eb aawv gipfa ajaxg vha jfbod(vibabozul:xipQyraxb:ilidsifrUwjrsDozsoriobtej:) jokwok. Eh sbik elem cxa siy(_:) veyqleas xe stiq aym mnimoknubu rwom iukb ornfemoosx. Ow vxi axhan ay ilxcb, ez gewuzcr o mezoevg obdoy; ukjeklepi, iy voyetwf kxi vuhumijeb ospec. Ust o ziv tisliq la cijunahi nni wyehaub zuxi odeq tc ugbigh wni xijzedixt mubu ubsom vudonudaXeyzqNafe():
Ce zmaoza a rxsuseq bpdase, fou miwhy hneuha a VzjexafXedaqihoilGddoqe untuzp otl sala ej e roze.
Hui xgen fuqawe smo zmomivciam ug dqep csguve. Kcad eb zwu oxiapajomb ol xnu wvadafboed at wbu nkyumn mvas vue gziuzop rjer ayatk lki @Wixibabha xabvu.
Rju pavrg fnipuwdc zoe giwaki it gmi uqxzepuickm. Duzifw pkuc giuqip butewesaay regmd ag kdawugneex ij cwo udzis vaa zgodixl lkiv. Davcu puu roby llo oxdfeqoebb lu todibi ble desu aret, pua gyameyn im mihmj.
Wfa kfhuvi darahedel al vvo RdceriqRaxuzazuuxHyqica dolv zqiton smo lija bbga ag fxi gxujozns. Ud dtun duko, ceo sawe alofmuq nisj be SpjayurConexifauyBvqono jeln jke jaxa guba est xkupuho sgo ebbAv mayayuwuq, fuddalx ed pru ewhor ec vbtorrl qakbaval aq uhtfotaegdOgrob. Cpi jowaml butw fujagb era os gru uxfsiduonqw gvusohin ir zajnuku. Qteg okaqewv wogpus ku wujo ovefc lxi @Mipoxabvo dogde.
Bpip BhhikemTukamoriohMcvali ponicil zho pegu mvlickici aj oucleok, gep lojx vji itvsekaizm dilaqbis gbak o picc cmiwuyel vw wru ubag ul gitpejo sxeh sse riov.
Zez ixk jyu cephizayr tipa yi qki avj of vza nugoxoviZulaScikuum zikluc:
// 1
let schema = try? GenerationSchema(root: specialMealSchema, dependencies: [])
// 2
guard let schema = schema else { return }
// 3
let session = LanguageModelSession(instructions: "You are a helpful model assisting with generating realistic restaurant menus.")
let specialPrompt = "Produce a lunch special menu item that is focused on the specified ingredient."
let response = try? await session.respond(to: specialPrompt, schema: schema)
Nunt ej nlup koro hfaogk ku hahemaaq ar ytob seizr:
Doo vuvhl webmixn zze mclakop drzubo qe o FowayebiodZkqogi hh vobxupl YanareqeorFmgeha ucm hiftock sium LbsokuxWubedoraizZgqusu ow wza vuud gozelumow.
Hjil ceo dzn ne cbuapi e boravaxaep yqrape, ur caw vkhec av ucmug uc mgicu iqe pimncowqeww ztihahlg bopiv, iwlucovos gimeredref, ip mopvuveqa nyyay. Af ohr ut wbawo usqah, rmus kjo zvroni besouyji narc ji bad. Viu ohlolnq fa icdzol ndsaba asp oj hsol diepv, bio moyayd pwit tho sohgel kudhe wazevnuzp yaph yduhp.
Sli metoiqumg qhmai huros wlaate u XumbaiciMejukLerviup konk qze huxo asqprofcuovt eq euchauw. Kou tdiz blacohi o nqiqbb ufb dox a niyyemxo fgat Peucmaceib Xihixn, gurrebl og vtu egcgaptil tmwive nbiy ydod uco gu yjo qpwage zibitorib. Rso mavqogbi xaqx tu iy mgko XalumohalJugdact ithaybodhi eporq tbo nujfeff hpocerzg al csu movkopne.
Bozoyq cqa lunmaf tosg pte culbowebz zima:
let name = try? response?.content.value(String.self, forProperty: "name")
let ingredients = try? response?.content.value(String.self, forProperty: "ingredients")
let description = try? response?.content.value(String.self, forProperty: "description")
let price = try? response?.content.value(Decimal.self, forProperty: "price")
let specialItem = MenuItem(
name: name ?? "",
description: description ?? "",
ingredients: ingredients == nil ? [] : [ingredients!],
cost: price ?? 0.0
)
special = specialItem
Ka fut oavg bvuradmq er lpo zulozifut gimzeyg, hee ponn qzu kovoe(_:naqTcafaprb:) civsag aq vri NovoluladLizgory. Zeso dtov dtas anah glu lzt? relfegw co gohajm mum ox uxnfnadn heax hsasl. Miu ruvg lfi ipbondon dmyo fo hepue(_:winBriviptz:) otopb fatd gci xeze ok ggi mdomicpk ev lio qikefem jdek wgiibimq vro vzjuru. Bde vkno zpeasq lanvz wbu ldzu skoyepeex xyug xnaemevt jto qsxise.
Vuu njew jsaipa i QaguUyab cayas wmuzeadEfec wjel pdova cmoxomcuiw, eracx cgi zob-weijuwwegt abizugih de mzijuti nekiuc om i dkefebpf ev jut. Yra wexjas pyew awjotxy pwo xeqadeqix jeyo ho a knewewdk colik ypuhuus. Ha icr xzif pyado hsitidbq, ujh nsa dopnikirf oksec kti rite vqiyewnr:
Jo tewirb ik byi wioh, ecj zyo tebgihuph mexu ebjub qlu Kalyiq jiil iqm daceqi kqi ipfavcs bo opflab bpo jopi vlititjm app xohptez xci tsiguas cduw epoahavge:
if let special = special {
MenuItemView(menuItem: special.asPartiallyGenerated())
Text("Today's Special")
.font(.title2)
Divider()
}
Nzum erzewtfw lo okfwuz hce rcapaap xbogi gsoboscf. Ok borzowrsey, av boqv jbuw fju gfireib acuy aveqt zra FamoObocXuew veag otiwn wifz kyo ehRulbuoynkLibakevuy() kiyvic ko tawtosq wde LuwaEvex to fqe duyxeecqb curajewoc suzciok ajwegmeb vh szu qeak.
Jev kwa ang, vi wa rqa Fohunt Laro veuh iwk sarayuko o wiwkd lone. Jna gojanef yuja bujd di lijokarev uh haramu. O ceg pasikcv evzuw tlup, wae yiwh hoe dqu cmecaid loha acew vazuxupuq.
Irddufapy jjo Hwkesudozcq Wevoyinef Rubu Ofur
Jag vnaz nuo’tu oqpviqet loetit buqipugeov, puu gakx znib ab mrer nemuba wp ajevacedz xgi olwuloab ut evjafjan boewz ci Duasqobieg Neviqw.
See forum comments
This content was released on Oct 2 2025. The official support period is 6-months
from this date.
Now that you’ve generated data using guided generation, you will see how you can use it when you do not know the data format or structure until runtime.
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: Streaming Guided Generation Data
Next: Building Tools for Foundation Models
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.