Está en la página 1de 12
Modelo Vista Controlador >Leccién 2: Modelo Modelo Modelos de patrén MC primero vamos 2 ver unos ejemplos para aprender los madelos y despues vamos a aprender a identifica los modelos del proyecto de nuestra cliente BYNARY CAFE Empecemee por defnr gue es un modelo nl patrén MUC el modal al que define los datos y las normas que se aplicn alos datos dentra de una apicacién esto qulere decir que dentro del ‘modela se ubican todos os elementos que componen a informacién que laapicacién maneja los ‘uals son clasifieados por tipos para poder usados dentro de la misma un modelo bien definido procure reutiliardefnicones para generar desarrollo mds féciles de entender mantener yescalar por ejempl, En una apicacin de coreo electrénico la estructura yl repla del corre electrnico hacen parte del madelo de datos os datos de pago de un empleado y las reglas de pago en un sstema de romina hacen parte del nadela de datos pero veamos esto con ejemplos Creemos un playground ynombrémosloAlbumMdelo en este ejemplo vamos aver un ejemplo para un bum musica les albunes en esta apiacin tiene los siguenteatibutos Un titulo, un artista, une unty un aia de public cada uno de ells es de tipo string asi que ddebemos definir ada uno de estos aributos como puedes ver aqui @ AlbunModeio // Playground - noun: a place where people can play import UIKit class Atbun { var titte:string! var artist:string! Var urlartast:string! var year:String! ‘Ahora tenemos la estructura del medela defini vamos a seguir con as normasy las funciones| ave pertenecen a este modelo una funconaldad que también casi siempre necestamos defn es la funelin de inicialzasisn asi que creemos ta funcdn para inialzar este modelo que simplemente ecibe los aributs como parémetrosparaincializarunainstancia con ellos import UIKit class Atbun ¢ Var title:String! var uetartastssering! var yearsstring! Anit(title:string, artist:String, urlartist:String, yearzString)< self.title © title Selfiartist = artist Selflurlartsse = urlartist Self.year = year También vamos definicuna funcién que nos va retomnar una descrpcién del lbum como un string. Nota que el modelo tiene una definicién una incazacién y una rega para retornarel nombre del ‘bur inport UIKit class Albu Var tattesstrirgt Yar artisesst ing! Yar urtaetistssering! var yearsserinst initlestte:string, artistiStrins. urlartist:String. vear:Strina) ftle 2 tstte OO Grartist selflyear = year , tune alburtiane()=S¢ranot return selftitiec > 3 Para terminar este ejemplo vamsa crear una funclon de setter para cambiar el aio import UIKit class Albue ( Yar ‘atte f urtartise:Sering! Yar yearsString! anus (tatterst-ing, artist self title = title Selflartast = artist Selfurletist = urlartist selflyear = year Strings wrtArtist:string, yearsstring) tune atbuetlane()=>Strinot ' tt fune setYear(year:Strina){ self.yeor'= year x I principal propésto del modelo de datos es la liitacén y definiién de los groper de Informacion y la reglas que se aplican a ellos los modelos son la estructuracién 0 el modelado comosu nombre india de los conluntos de informacion que serdn utiizados al larg de todo el elo de vida de ta apliacin esto permite que el cédigo sea modular y por lo tanto fécll de entender y manejar entences toda la nformacién que se tenga almacenada en base de datos 0 cualquier otro sistema de persistenca. se cargaa hacia al modelo y se tendré al aleance para el consumo para el resto dela apicacion pues esta es la funcion del modelo de datos los modelos pueden tener relaciones de_uno @ uno y uno a muchos con otros abjetos del madelo en el Programa eso permite que estos objetos sean extensibes y Sean capaces de representar ‘estruturas de datos comalejas lo que ele las estructuras de base de datos. ‘Ahora vamos a volver 8 nuestro proyecto. para identicar los modelos. Como vimes anterior mente este proyecto tiene definido en el storyboard y la informacion esta directamente ‘especincada en la vista ce cada producto esto puede funclonar pero implica que si el clente sea agregar otro producto deberé crear otra vista mas con su informacion estabecida de ‘manera estitia tal co esta actualmente asi que Io primero es identifica ls datos que se presentan, Supongamos ue nuestro cliente incuye pasteles dentro de sus products ala venta ya hemos creado un grupo con el nombre MODELO vamos a da click derecho sobre este grupo y Seleccionar new fle vamos a aseguramos que a ventana emergente este seleccionado cocoatouchelassy vamosa dar cick sobre el botén next leasignamas a subclase NSObject ven el campo de das vamos a poner ef nombre Cake ahora vamos a dar click next y aigna elgar donde creams el archivo ya tenemos nuestro primer modelo ahora para nario utlicemas Informacin relaconada con el producto y lo que tenemos hasta hora en el proyecto actual as ve definimos dentro de nuestra nueva clase las propiedades de dichos pasteles el producto ‘euentacon un nombre pea ser identificado y una imagen representaiva yun valor monetarioy ‘tro grupo de datos desciptvos que pueden se los ingredientes principales la cantidad definisa fen cortes porciones 0 utidades su aportecalrco yuna breve desripién referente ala porte rnutriconal el pastel ahora dentro de la clase vamos. crear las variables que pertenece a Cake, Una variable Iamnada NAME de tipo string, Una variable lamade IMAGE de tio Ullmage, Una variable llamada PRICE de tipo Double, Un variable lamada INGREDIENTS que serd un areglo Ge strings y Una variable Hamada PASTRYQUANTITY qve sera de tipo portion, Una variable llamada CALORIES de tips ity al nal Una variable lamada DIETRYADVICE de tipo sting y que es portion como vemos elsistema nolo reconoce pues no es un tga definido por el SOK as! que lo ‘que aremos es crea una ENUM con ese nombre yas valores Slice Potion y Unit import UIKit class Cake: NSOnject { var 3 price: Angredients: [String]! pactryQcantaty:Port son! calories: Int! dietryaevice:String! enue Portion: Stringt case slice 'Stice” case unit = “Unit” case portion = “Portio: ‘Ahora vamos aidentfia las funclonalidades que pertenecen solamente alas replas de este adele Loprimero es erear elINT en este caso crearemos 2 el INIT sobrecargado de la clase padre yun Iniciizador por conveniencia que seré el que normalmente se consuma para crear un objeto de tipo Cake con datos des el inicio vallamos rpidament pore INIT lo que normalimente hacemos esinicir as propiedades del abjtos en valores limpios o vacis y luego invocamos el Int dela clase padre unk class Cake: NSobject ¢ arage:\ price:Daublet ingredients: [St pastryQuant ity: calories: Int! override init()¢ Port dietryAdvices Str ol! self. nare self. inage self. self self. pastryQuantity self-calories = @ self.dietryAdvice = super. init() > enum Portion: Stranot ‘Ahora creamos uninit por conveniencia que es el que usaremos para crear obetos de tipo cake a partir de los datos que foscompone creamos a funcion Convenience init Con tos parimetros de entrada: name de tipo string, image de tipo Image , Price de tipo Aoublé, ingredients come aregl de string, pastryQuantity de tipo portion, calarles de tipo in, letryAdvie de tip string Invocamos nuestro nt por defetoy luego asignamos ls valores recibidos a nuestro objeto ahora ‘dentitquemos ls funciones propias de este modelo necesitamas obtener [a lsta de ingrdlentes formateada como string creamos a funcén et ingredients string que retorne strng....-dentro creamos un sting de retorno que inci vacio una variable de contol de tipo entea y un for para recorer los elementos que compone Ingrediens ...... lo que hacemos es simplemente agregar cada item de ingredients y le asgnamos un carcter de coma, al nal excepto el ultimo en donde donde agregaremos un punto, Lego retornamos valor obtenide (tra funcién que necesitsmos es la que nos entregue devuevael nombre dela cantidad asignads para el pastel eso lo hacemos con la funcén getPastryQuantityName esta funcén retorna un String yla obtenemos llanando la propiedad rawValue de la enumeracion portion que dfinimos setr.anat, self-nare = nane self inage = image selfprice = price Selflingredients = ingredients Self-pastryQuantity = pastryQuantity self.calories = calories self.dietryadvice = dietryAdvice + func getIngredientsstring(}-=Strinat var ingredientsstring = var ize for iten in self.ingredientet ingredientsString += iter Af( 1 >= (self. ingress nt - WM ingredientsst ring Jetset ingredientsstring +=", } > return ingredientsString 5 func getPast ryQuant ityNane()=>5¢ ino return self.pastryQuantity. rawvalud } > enum Portion: Strinot case slice = "S case unit = “Un. tne Esto lo que hace es devoler el valor asgnaéo al elemento en ves del elemento de a enumeracién como tal en este caso cano detnimes a portion de tipo string el rawValor sera el string que asignamos en la defincién dela enumeraién solo nos fata una cosa masa funcén de modelo es la de contener u obtener i informacion que serd desplegada en vista 0 que serd capturada dela misma as que nuestro madele deberia proveerdcha informacion al controlador quien es que la ‘consume y proces para ego entregirsela a la vita asi que por ahora creemos una funcisn de ‘clase que retorne un modelo con informacién predefinida con el fin de ser invocado desde el controlador yas este tens informacion para procesr les gusta el pai de manzana fo que hara esta funcién es crear una nueva nstania de cake con las dato relacionados al pal de manzana y Iegotaretorna como restltado En resumen ya hemos creado nuestro primer modelo recuerda que primero tenemos que crear la ‘lace identifcar ls atribetos del modelo cear {a funciin dein lego pasar ls uncionalidades 8 modelo también ecuerda crear el archivo yla clase con el mismo nombre del modelo

También podría gustarte