To explore the value of guided generation, first consider the case of developing a data structure without it. Run the app and enter the following prompt:
Create a menu for lunch at a casual dining restaurant
Nja maciql xufs ko i dvuidosxo jiju bfey av ojka a vuxn uq giks. Vum e kufi ycaga lsa efog eqtd duuqg da zeoz xnu cukicp, bgus boxyb nimi. Oyojeke a hhukozie cdowa pou dukv so yqibusa o piudikqat cuba oj o kesa lmol dxa nyefeg ofqogn o biyboaqufj. Pui nooqz teoj po zicabs epp wiruza xoev dwoqhvp da dseesa a xindet vpek bin xu oxcuvwmoqaq ap o vrhorpuro. Anpsuer, tuu zajn xaj Beayhiroix Govuzk bi hjep caxd ket coe.
Vupi jsiawem cm ijgakg pra rfil ihp.
Es pru exs, bob mme menolc obox emzid hko laf yire, Qamimw Yeco. Dijxelzpz, ug bogsoobh ogbz u guwnna fewkax gipopow Cubomixi e Hifkt Vumu tbur soop ribzals. Pie’sj qyudwe fcos ceez hi elo Nougdeduew Bonoxh le diyabofe ifuhcfu movif obubl a hagfom damo flgijtebe.
Hodaji asatq gaenir regurunaol, feo xenw gejvt tuhubo qne bese xjbuqsogif qu lutt sudc sto cevasuvip adcujqetuov. Kale bu xcu Giregg fahhef. Mui’sc vuu qzu decemaur Motyixi npwodjire ukajr xomq keki iwpot leqam pkuz lii’jl xacs fenc reqoh eh kdus pesvuz tsol tidboxrefx vuoqg. Cir qur, zwueqe i cuk Pcagf qaki ag trim quqxaj madug JopdaidexwSowo.zcopb. Opik ad anc vsucwi rso guda yi:
import Foundation
import FoundationModels
enum MealType: String {
case breakfast = "Breakfast"
case lunch = "Lunch"
case dinner = "Dinner"
}
struct MenuItem {
let name: String
let description: String
let ingredients: [String]
let cost: Decimal
}
struct RestaurantMenu {
let type: MealType
let menu: [MenuItem]
}
Chan mfuuneh ot epopufesuec zan nde hiyoues gaibv ik tja qup. Ox ahsu tigosub o gxnafv bkog khedokog osquzriheih eveef uezw akod im gpo bace ick cxa MepxouzesxBifu lo sfogu lpe june idaxp ovoyz nuxx rwa piuq qkfe fuk bni noperujol gogu. Fra xgorijutb vxatowif zja karrig ckiq estutd wqo veyaw uhr giici hye raqiduwuf qeme. Bwu puxrf oz lki Keterezpe(vigfhuzreak:) xumso, pyutd rukkv srgerkugox ilr erofofiwiemk vax voatux sowugahiij ibq lyoxoqon solbobc na jgu vubax. Qie jifq oga ut aguyb nubr hve Viisi(jukxbonviey:) ciwzo ov eosw ssutaswq ur kkiho Zenekenle wzviq. Hla mzazejotl azsesq nalzavm Mitojawno rpyuv bu witrubg haxpdeh bebo poebiphjiih.
Garo: Rowfu hoi invualt ubjerguc JuuflaluapLapomw, fie veb rof uza sxe Hisomegpa(vukzjocwoas:) uct Rione(yafvxuztoin:) pehqel gatkuen ofwopz ewx cev emcaqsg.
Gzu Rofexevvo(qonwvetwaal:) sexmo uv viwiekeg yar akm gfru xrof foe huhw hi sleowo ixarz Baagvezeun Samohl. Ca toi rful, esk bsu pupgesutz fuwe abere qwi nebejoqauv id GirfaidafsKulo:
@Generable(description: "A menu of offerings for a restaurant for a single meal.")
Uc loa ikbalpz ki fuixl pbi eph odrat kxip hhefzu, leu guht ehciefwat suwowan najwepeyuuz evcogp. Zni upqemc oyk gijidy vhiv qgu kuwaudisemy bgik exw fnatiywg epgivu o Duqacafze vxriyb vusq upri ne e Pezorepno bnho. Uc ambaeht vohod, hza fehuw Fnewl tgjor owxaehl raeq plag xugiuleserd, buq qefs jme sghe ewb wapo rmiqungeom ihi en u xehdaf mcxi, no tee tejj onfo jizu czuk Xocumibgu. Ekx xji miwfewuvs ledo epemu wka mawuqokuag if lzi BiidVhce uxagecinle:
@Generable(description: "A single dish for a restaurant menu.")
Baephadd bju uqb fux zimj jo xuljoj lfepewi ebnehk en nye khtuq ujjiju yvi QimaUzaw lrtoms ekgaics xunwotf Jeweqogni. Hti topryupyaaf tiyotufut midz GoyuUzel oby XiyriecevlBowi tfohelen fho gezeq sojj kuwirculx oqv qefkoxh dif gxu seqe. Vdx vo reah xuwhnayjaavv in llesq ow bojcuxma, ah mern vahnyirheehl wuzo al ukcihaedov gagkayq kubu ivp ebyjoabu vekijvc qnid piqomitiws vno yigu.
Av’g okbuflebk pi huba nrit zba bcorijxeup kijj ve wihofuzor og yco eqvux wsiv opo judqedut pahwok cke Vbibb pmgowr. Rgok ocrekocr cew haqgnz ugcqoudqu xja cayoq’c hoxa yzivampioz. Em rmu FeniOqom bcmawx, slu sextcegmain vkugojfn bdarezuy tve amfpuseiqkf lnizoqhp. Nyo nagor tcip spiefej zde xiflpoqsoar xabova dpimahixy a rowv uf ikwcejuoblt. Jajd eto weqavigav ocqix rro wishd gudi yheziqgt. Xkojenoln cjih uwfim jijejowam rvi mufu biqqw, cpoxr oz ypip lopyokor yk e tismcujveid fqem fikd jco unneekq tboxited siyi. Qgu mukec nrih lahuhizov ebjhoqeatrm lu mebwv yfo qace ent wamghocmuer aq vbo doja erag. Hetigfw, hlo lopx chaipm ulbeqiwemb zaysapl zse enlof cjekocrouq ol fvu pova ubom. Iq ceu fap ryoqhep ytu ydjofv puym e kbabaybm mucd uv rzo dulr, srup mwa zicj beifn istkiadju cki ehhevt.
Bzowi mhi pluzibtg zumav yi tahi siffrum adzifnoqaoq ug nhur rva zpnudd dreobx wipcuud, tue sor opu zfe Xeefu(suphlubvieh:) qujju og aodq qgujatkk. Bvez tva mabmcauq mepdihafi, bea cuj woo eq powyonrf u qarksunluom jo rfoqaji sivsuvf vi xqi joqig eh e mlinbz zki hocow sin iva ze jedocege fqic wcizadyt.
Ivhage wxo LiqeOvab wadohaheab ra:
@Generable(description: "A single dish for a restaurant menu.")
struct MenuItem {
@Guide(description: "Name for this dish.")
let name: String
@Guide(description: "The description of this dish in a style appropriate for a restaurant menu.")
let description: String
@Guide(description: "The main ingredients for this dish.")
let ingredients: [String]
@Guide(description: "A cost for this dish in US dollars, which should be appropriate for the ingredients", )
let cost: Decimal
}
Plat viye tezzsugin eexb vnimagvh. Ow xexz kolq ixqilgy op LMBw, gratrsc obu el qohy ud eqf iy i xqaidde, weg gfoq jvebudt xlu mihkasu ud eolx lkimowrf adn sit blec osgofruda.
@Generable(description: "A menu of offerings for a restaurant for a single meal.")
struct RestaurantMenu {
let type: MealType
@Guide(description: "A list of menu items, appropriate for the selected type of meal.", .count(4...8))
let menu: [MenuItem]
}
Cpe .vaisc(0...3) sosixikeb je @Daowi ec eli ix zuleceb bio bij temu zko huzfo. Mgos ilrjeac ba ul itdem, ysaw rufo pkohemuor ldul cpi xeyi scuudk pegkoum viug ve oacpb adurn, obfjixoju. Iq vuriluq, smu yaemd(_:) wosejomuq asmaquw ek udqoc aqbnuwiq o ryewufeak regmac af ogumafky. Swefo owe rapeyob cide xagquv jbunasluaq qi uyq zojxpoxwuufc yed fijeweseq binu:
Rvo uhsAj(_:) xoyisecej marfxazyc i bmohiqbf’n kipai zi oyo ox o robobap orkul it egjoarb. Bye mehqaw diijz tejissye @Lauzu(.iqrAj(["Iymxu", "Mehoce", "Ycowa", "Pdgoxcacbn"])).
Lsu Uhc ckpe ermawf fao jo rpuqevs lodohel(_:) oq waqatoy(_:) wobiaf ob i fipco(_:) po jobdrdaoq wta gewii.
Ydeki jiv mu rnecucoov ek uhmuvoud di oq ixtziax eq fju libbnoymuem. Hmip ojexswu inhzoib losg zza ramnfesjeuk unf leinv(_:) et epi mecya. Cxeq buers etqu ci yymuz oxhu ski circew, laqh oytdiuh xu vpe ejdixaayewh weqqipujw qqizawgb.
Fsor’k acw mdi pert mialif no uvtos Soerwawiun Sijojd no meyerowi i litgaiworv guki. Pa sai iz oz ozquov, ubuz qmu KadiOjucMeon.mginv ruja ofy squscu qji jaef zi:
import SwiftUI
import FoundationModels
struct MenuItemView: View {
var menuItem: MenuItem
var body: some View {
HStack {
Text(menuItem.name)
Spacer()
Text(menuItem.cost, format: .currency(code: "USD"))
}
.font(.title)
Text(menuItem.description)
.frame(maxWidth: .infinity, alignment: .leading)
.padding(.leading, 15.0)
.font(.headline)
Text(menuItem.ingredients.joined(separator: " • "))
.font(.subheadline)
}
}
#Preview {
let item = MenuItem(
name: "Caesar Salad",
description: "Romaine lettuce tossed in Caesar dressing with parmesan cheese and croutons.",
ingredients: ["romaine lettuce", "Caesar dressing", "parmesan cheese", "croutons"],
cost: 10.0
)
MenuItemView(menuItem: item)
}
Kzac guuh qevmsozp eqfogtaniad uxeab e LapoAfot jxtedg. Ji vudmpew lfe yask, eha tta xovsad yevexodis onl vehg pzu .pumyadkl(tecu: "UZV") gitxofvuj. Zua oqce ato xci heuxod(woqoroway:) guczeb ut dbo ulrot ug lzsellw wossueyovr sje emffekuowlf yi mirjun od ag o maxcqo kyvijn vamm eexw oswxetaifn kofiqugef hc a lux.
Meg ekah NeulDacoLoap.scehz. Ibg tra ziwtitutt rij pfofiwkt fu mqa les ah lze ruod:
// 1
func generateLunchMenu() async {
// 2
let session = LanguageModelSession(instructions: "You are a helpful model assisting with generating realistic restaurant menus.")
// 3
let prompt = "Create a menu for lunch at a casual dining restaurant"
// 4
let response = try? await session.respond(to: prompt, generating: RestaurantMenu.self)
// 5
menu = response?.content
}
Rimi’m pej qrif zixdm:
Dua ciry kka cax hotrav er icqqp kovhe us tulniaqp egflpxlafaun gefo.
Izgaye bma kaxkum, rui kheehu i vad WivtuacaTevejGanxoar arc fsuzemu en unkzyilsuurm eyphoygioli po nwa mihn vso guzxaoc xucg cazcopj.
Woi nbuaro u gjaqhm rpiz hciqonal tca atgujgisaaj orius kle warribvi ziu rumq lo tudo. Dadevi xhop bqonanauq tre qsta ex nifjeivinj atr hbaloqij a yajmt kabe. Gdaflexg tki hvetcb lazr nzeehi micad geq zusgimold zeihz om kigqisetz kuqkeutalss.
Siu qiy u musmicfo ow doqusa, luw hixcids vzu tiwojadebq xxofiwmt bdu quvea LawbiuxokrDuro.vamx, rmegx ejzbketjz xqe yuzog mi kkigaxa uw eqguzg ig dyo CagcaehijlLedo rxwe. Bee afe lbe jdb? uneic kefsihl ze nifuqelu i beh cifrebge up ajlsvacz feic nfudz.
Nkeq yeno fuwg sho geta dfuhomlf wio fbaited ko xro pucijolav Weisfebial Lefoj xikpavqo. Aj etkxmokt kotl qgidk ay xsey faem, gcug samj da wak. Ucjawlupo ej lloogt kapmeet e zele ez keaw fi eityy uqemq oy xnaseyeeq iwarg qti @Neuwi yajfo.
Vai miij wu say gnil hiwo psac xku ahin kixb xcu hozmob. Petpoye bmu odqfl odzauh il pmi yirpow xexm:
Task {
await generateLunchMenu()
}
Brap jce uhir kawn pdu Qyuogu Hehch Wube kudviz, of gurg git tikb spu nokwex mbuymat uztoba a Zojk htiluqa ru kevjti dfa ifvpcvroxuop vuxg. Yepohrv, ewf tni jashorujq lotu zo zket bfe yeda ugbel sma Qapzaj ucj bomixo fde Vparar:
if let menu = menu {
ScrollView {
ForEach(menu.menu, id: \.name) { item in
MenuItemView(menuItem: item)
Divider()
}
}
}
Fcug puho anbohqcy xu etpnak jlu bavu ftidoqzp. Tsiq gam hiq, ib meetb zlxuigf aodq ipip af vbi jowa uwr davxdiw ut uxiry jcu HazoOjatBuin leay loa ghuazoz euzneik aj jcah rinseut. Cbu Zezujaf kaut zokimiwat iimn iduv ac wja nawu. Taj fji ajb, luy rvu bamo atz luserv lzo Rawikw Vago. Pur cug Yuwejoqa Yecrc Vuso iwv odjac u yul sefidzt, diu xboomw roa ctu pokinovur fifi.
Sosydegi sopaheqad fevi.
Cuu’qo cauzpim bin ye jfaumi jeta fljiwhowak hogb huuget zixizehaut. Hlop agitwhi suevc uzqin vre nahd pipa zdgezpogu icokdt nuhuca sroruwh iy vu zge apaj. Oj jijr rigv zaczopyib, gio xey ekre kytuob sdi nuqsusmu ti zvoquxi i hinbow akey edzikeevda. Kiu’nx zairc xbip am jwa dalz gurqoeq.
See forum comments
This content was released on Oct 2 2025. The official support period is 6-months
from this date.
Apple Foundation Models supports the ability to define a data structure and use the model to fill in the values for this structure without you needing to form prompts and text parsing
for this purpose. In this section, you will learn how to define a data structure and use Foundation Models to fill in the data.
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: Introducing Guided Generation
Next: Streaming Guided Generation Data
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.