>> DANIEL ARMENDARIZ: Hola a tots, la benvinguda a iOS desenvolupament d'aplicacions
amb rapidesa.
Estic Dan Armendariz.
Estic preceptor d'equip ciència aquí a l'Escola
d'Enginyeria i Ciències Aplicades.
I ràpid és en realitat una mica d'un llenguatge molt ben cuidat.
I tinc alguns plans per avui.
Així que durant la següent hora o així que anem a mirar-se a si mateixa iOS desenvolupament d'aplicacions
usant Xcode i crear realment una mica , Aplicacions molt simples molt bàsics.
I mirant a la forma en què realment prendre aquestes aplicacions,
i construir amb elles, i en realitat posar-los en un dispositiu iOS.
Algunes de les coses que no anem a mirar
inclourà coses com en realitat tenint una aplicació
i posar-lo en l'App Store.
Hi ha una gran quantitat de tutorials en línia que l'ajudarà amb aquest aspecte d'ella.
Però també perquè com part del CS50, s'obté
a unir-se al desenvolupament d'Apple equip, equip de desenvolupament d'aplicacions de CS50.
Si no ha fet encara i que ets soci CS50,
Jo recomano que fer això perquè això
és com ets capaç de crear alguns programes en Xcode,
construir-les, i de fet posar ells en alguns dels seus dispositius iOS
si vostè realment té un dispositiu iOS física.
Si vostè no té un iOS física dispositiu que està més que bé.
En realitat pot desenvolupar per iOS.
I Xcode té una simulador que permet
per veure la seva aplicació en acció en l'equip.
Però quin tipus de és una cosa endreçada per jugar i interactuar realment
amb la seva aplicació en un dispositiu real.
Així que hi ha un parell de requisits per realment fer tot aquest desenvolupament.
Un d'ells és que vostè ha de tenir un Mac.
Ha d'estar en execució 10.9.4 o posterior per tal de fer el desenvolupament amb ràpid.
>> Podeu utilitzar una anterior versió per desenvolupar
amb Objective C per iOS i Mac.
Però recomano, i una gran part del exemples que veurem avui,
utilitzar 10,10 Yosemite.
Així que si vostè encara no ha millorat, que és una bona excusa per fer-ho.
Ara Xcode 6.1 és l'última versió del l'entorn de desenvolupament integrat
que Apple ofereix de forma gratuïta que es pot descarregar de l'App Store.
I li recomano que També executar la versió més recent.
>> Si li passa a estar corrent una anterior versió, Xcode 5 i per sota només
simplement no donen suport ràpid que sigui.
I les versions beta de sis, que van ser posats en llibertat durant l'estiu,
fer compatible ràpid, però hi ha hagut un nombre enorme
de canvis en el llenguatge, prou perquè el codi que ets
anar a la vista i que podria trobar a Internet
serà en realitat no compilar correctament en aquestes versions anteriors de Xcode.
Així que de nou, si no encara tenir un compte de desenvolupador,
Et recomano que vagis a developer.apple.com.
Inscriu-te, creu un compte de desenvolupador, i unir-se a l'equip CS50 desenvolupament d'aplicacions.
Això proporcionarà a vostè una oportunitat compilar les seves aplicacions
i els va posar al dispositiu.
OK, així que anem a començar.
La primera cosa que farem és
per crear en realitat una molt simple projecte en Xcode
que li permetrà fer una sol·licitud.
>> Així que si vostè encara no té Xcode obert, endavant i obrir-
i crear un nou projecte.
Una pantalla especial de benvinguda s'obrirà i li donarà
algunes opcions sobre el que que és el que vols fer.
Només dir que voleu crear un nou projecte, una nova aplicació.
Aquesta finestra s'obrirà, assumint que vostè està utilitzant Xcode 6.1.
En aquest moment, i per al durada d'aquest seminari,
estarem fent servir veure aplicacions individuals, simplement
tipus d'una aplicació bàsica a mullar-se els peus.
I vostè pot ramificar pel seu compte a partir d'aquí.
>> Feu clic a Següent a aquest punt.
Ara aquí hi ha un parell de coses que és possible que vulgueu entrar.
El nom del producte és el Nom del teu projecte.
En aquest cas, només sóc anomenarem Seminar1
perquè és el nostre primer exemple.
Nom de l'organització, en aquest cas és només el meu nom.
Per descomptat, pots canviar- al seu propi nom, o per CS50.
Identificador d'Organització, si passa que té un lloc web acaba de prendre
el nom de domini en revertir, com.yourname.
i després el nom del producte ha d'aparèixer de forma automàtica
després d'això com l'identificador de paquet.
>> Òbviament, l'idioma que estem estarà usant per avui és ràpida.
Pot, per descomptat, utilitzar Objective C per això, però avui serà ràpida.
I anem a per ara diem dispositius universals, per la qual cosa
que funciona tant en l'iPad i l'iPhone.
I deixarem nucli dades no comprovades per mantenir
el projecte relativament senzill de moment.
Així que seguirem endavant i feu clic a Següent.
I es va a preguntar- on vull guardar-lo.
Vaig a guardar en el meu escriptori per ara.
>> Molt bé, així que ara això és el que passar quan Xcode realment obert.
I noti que el El primer que es veu
És aquest punt d'exclamació que diu sense identitat signatura trobat.
Jo vaig fer això intencionalment en el meu equip i estic
l'esperança que vaig a ser capaç de solucionar en realitat,
perquè jo vull que vegi com això en realitat treballar en la seva pròpia màquina.
>> Endavant, feu clic qüestió fix.
Se us demanarà si té una compte de desenvolupador d'Apple existent.
Aquí és on l'adhesió a la CS50 equip de desenvolupament d'aplicacions
és important perquè no només tenen un compte d'aplicacions,
però també té la capacitat per signar les aplicacions
i els va posar en el seu dispositiu iOS.
Es tracta clic no-- tema correcció no és necessària
si només anem a construir i desenvolupar a nivell local,
enterament dins del simulador de iOS.
>> Però per ara em vaig desenvolupar i posar ells
en el meu iPad, que serà capaç de transmetre també.
Així que vull afegir realment això.
I es preguntarà em per a mi ID poma.
Així que serà això.
I he de buscar el meu contrasenya, que és per aquí.
Així que em donen només un segon per trobar que, i copiar això i enganxar-lo aquí.
>> Feu clic a Afegeix.
Es va a preguntar- quin equip Vull unir-me.
Jo vaig a fer l'escola d'enginyeria.
Feu clic a Unir-se.
Vaja, això és el equivocat.
Anem a fer això.
Esperem que un funcionarà.
Que un segueix sense funcionar.
Ens estem quedant sense bones aquí.
Bé, aquest hauria de funcionar.
Ara tanca això.
Ara anem a fer l'escola de enginyeria, feu clic a seleccionar.
>> I ara espero que després d'un parell de segons can-- Acceptar,
Vaig a arrebossat i petició.
Oh home, això va a no funcionar.
Bé, vaig a tractar d'una diferent.
Anem a fer això d'aquí.
Demostracions en viu m'estan fallant.
Potser hàgim de tornar a només Edifici completament a nivell local,
però que estaria bé en aquest cas.
>> Així que aquí, mentre que això és en realitat de treball, el que farem és simplement
crear un molt simple Hola aplicació Mundial.
Així que això és Xcode.
I si no has vist encara, que pot ser una mica intimidatori al principi.
Hi ha una gran quantitat de panells, hi ha un gran quantitat de xafarderies en diverses àrees.
Però tot just s'adonen que hi ha realment diversos components principals
a aquest entorn de desenvolupament.
En l'extrema esquerra són tots els arxius que són aplicables al seu programa
o per al seu projecte en particular.
Estarem fent clic al voltant en alguns d'ells i anem a
assenyalar la més de les més importants en el temps.
A l'extrem dret, que tenir un conjunt d'atributs.
I tots aquests atributs, hi ha són diversos panells per als atributs.
Els panells canviaran depenent de el context de la pàgina principal, el qual
passa a ser en el medi.
Ara el medi realment pot mostrar que una varietat de coses, per exemple,
el seu propi codi.
O pot ser que en realitat tener-- quan fa clic en el guió gràfic que
és, per cert, només una gràfica representació del seu usuari
interfície per a la seva application-- a continuació, el panell d'atributs
a l'extrem dret canviarà realment.
Ara hi ha un parell d'altres coses que vull assenyalar.
Pot espècie d'explorar els voltants en el medi ambient pel seu compte.
Però una de les coses que ha estat molt útil
és aquest botó d'aquí, el la part superior dreta de la finestra.
Hi ha un botó que s'assembla més a la
l'esquerra té un paràgraf seguida de dos cercles i ordenar
de dues fletxes que apunten de distància uns dels altres.
Si es canvia entre la editor estàndard, que
és l'extrem esquerre, l'un que està seleccionat per defecte,
i els dos cercles superposats entre si, el que ofereix
són una vista doble panell.
>> I això és en realitat serà útil per a nosaltres
quan necessitem enllaçar articles en la interfície d'usuari al codi.
I parlarem més sobre que en un moment.
Però s'adona que si vostè aconsegueix fins i tot més panells d'aquest tipus,
pot simplificar la vista només una mica fent clic de nou
en el seu editor individual.
Fins ara, tot bé.
Així que, bàsicament tenim el codi a l'esquerra, atribueix a la dreta,
i sigui el que sigui que estem treballant aquí al mateix centre.
>> Així que aquí m'he fet clic en el guió gràfic principal.
I el guió gràfic, de nou, és una forma en Xcode
que en realitat es pot crear el seu usuari interfície mitjançant arrossegar i deixar anar
tècniques.
I així, per la nostra mateixa primera aplicació d'aquest
és precisament el que farem.
Anem a anar a la porció molt lluny inferior dreta
de la pantalla, que conté una varietat d'elements d'usuari
que després es pot fer clic i arrossegar per crear la interfície d'usuari.
>> Ara tots ells elements s'anomenen vistes
perquè proporcionen algun tipus de vista.
Hi ha una vista de la imatge, per exemple, per mostrar en realitat
una imatge en la interfície d'usuari.
Hi ha una vista de taula a en realitat mostrar una taula.
Així successivament i així successivament.
Hi ha una àmplia varietat de vistes que es poden seleccionar aquí.
Així que per ara anem per buscar una etiqueta.
Vostè només pot desplaçar-se a través de totes les llistes que hi és.
Però aquí hi ha la recerca bar a la part inferior
que fa que sigui més fàcil identificar visites específiques que en realitat
voler arrossegar a la seva interfície d'usuari.
>> Vaig trobar la meva etiqueta.
Vaig a arrossegar aquí, directament en la meva aplicació d'exemple.
Allà mateix, al mig es veu bé.
I jo vaig a escriure "Hola Món!"
Premeu Enter.
Ara tinc una etiqueta.
No es veu com si fos centrada bastant correctament.
Així que puc tractar de tornar a centrar.
Afortunadament s'ofereix a aquests guies per fer les coses molt més fàcil.
Vaig a tractar de compilar.
És d'esperar que en realitat treballar aquí.
I si no ho fa, en un moment que, de fet, apareix en el meu iPad.
Està aquí mateix.
Aquí està.
>> OK, així que això és tot.
Hem acabat.
Hem creat la nostra pròpia primera aplicació.
Ara, òbviament, això no fa res.
És només una etiqueta.
No hi ha connexió entre la interfície d'usuari i el codi.
Així que si en realitat volia per crear aquesta connexió,
si en realitat volia tenir algun tipus de comunicació entre els elements
que hi ha al pantalla i el codi que
ens permet controlar aquests elements, a continuació,
que realment es necessita per mirar al propi codi.
>> Així que això és el que s'anomena ViewController.swift.
I per, especialment per els seus primers programes,
això serà una espècie de major part del codi que enter--
serà en aquest document aquí.
Hi ha un munt de coses això és en aquí fins ara, oi?
Hi ha classe kit d'interfície d'usuari d'importació, anul·len, [? funk ,?] totes aquestes coses diferents.
I no és molt clar el és que tot això significa.
Així que anem a fer un pas enrere de distància d'Xcode per una mica
i mirar el llenguatge mateix, ràpida.
>> Així que amb rapidesa, va ser en disseny i desenvolupament
a Apple per prop de quatre anys al meu enteniment.
I hi ha un parell de característiques en ell que són molt ben cuidat.
En primer lloc, es va compilar idioma, igual que C.
Així que primer cal compilar i executar
abans que vostè realment pot executar el codi que resulta.
Però no és, a diferència de C, un interactiu missatge que en realitat es pot executar
i escriure ordres arbitràries en.
I molt semblant a una consola JavaScript que vostè pot estar familiaritzat amb l'ara,
en realitat avaluarà els comandaments i proporcionar a vostè la sortida.
I fins i tot han pres que al següent nivell
i que han creat alguna cosa anomenats parcs infantils en Xcode
que li permetrà treballar visualment amb codi.
I que en realitat veurem alguns exemples que en tan sols una mica.
Es basa en C. C subjau , Perquè tots els compiladors
crear el codi de C i crear el codi objecte.
Però realment accions relativament poc sintaxi.
Es veurà bastant diferent.
Hi haurà algunes similituds.
Però no seran bastants diferències
en comparació amb, per exemple, JavaScript o PHP.
I anem a assenyalar aquests en un moment.
>> Ara una de les coses més grans Sobre SWIFT això és bo
és que, especialment en comparació a C, que està destinat a ser segur.
Tot en ella té la intenció de ser molt inflexible de tipus en.
De fet, és gairebé molest al principi, quan vostè primer
començar a treballar amb rapidesa, el molt que imposa tipus a tot arreu.
Qualsevol cosa que sigui una cadena ha de seguir sent una cadena.
És molt difícil classificar de convers o coaccionar en alguna altra forma.
>> I de nou, anem a mostrar exemples d'això.
Però en última instància, adonar-se que això està destinat a protegir a vostè,
i per que em refereixo al seu codi, de estavellar d'alguna manera horrible quan
vostè té algun tipus de tipus no coincident.
I una altra vegada, treballar amb ell.
Perquè serà frustrant al principi a mesura que tracten d'esbrinar per què exactament
que està rebent aquest inusual error tractar amb tipus.
Però valdrà la pena al final.
>> No tractar automàtica gestió de memòria,
així que ja no tens haver de lidiar amb coses
com malloc i lliure, i tot d'aquest tipus de coses.
I també està dissenyat per generalitats.
Així, mentre que podem utilitzar una Xcode per crear aplicacions de iOS i aplicacions de Mac,
també podem només l'utilitzen com un llenguatge de script.
I així podem usar sort de lloc de o en lloc PHP
de Python per realment analitzar i processar ràpidament
algunes dades que tenim al nostre ordinador.
>> Compta amb una àmplia varietat de moderns característiques, opcionals, mutabilitat,
genèrics, tancaments, i molt d'això coses que vostè pot o no pot reconèixer.
I és només una espècie d'un desafortunat part del llenguatge que alguns d'aquests
tipus d'elements futuristes i moderns que estan continguts dins dels elements són
tan profundament arrelada que en realitat ho faré que ensenyarà CS50.5 una mica.
>> Hem d'aprendre una mica més sobre algunes de les característiques per tal
per entendre realment el que està passant successivament i així que es pot veure en el codi
i no sentir-se totalment perdut.
I veuràs el que vull dir per que en tan sols un minut.
OK, així let's-- suficient d'això classe de matèria teòrica.
Anem realment ullada a la nostra primer programa ràpid.
És una línia de codi.
La línia 14 aquí, que diu CS50 impressió l n hola.
>> Així que hi ha un parell de coses que és molt diferent en aquesta comparació
a les coses que vostè pot ser utilitzat per de C, per exemple.
Un d'ells és que no hi ha intmain, no hi ha secció inclouen,
no hi ha res d'aquestes coses extra.
El inclouen, com a estàndard I / O, com les biblioteques
que en realitat proporcionar la característiques estàndard de la llengua,
s'inclouen automàticament com part de la biblioteca estàndard de ràpida
i que s'importen automàticament.
Vostè no té a veure que la importació manualment.
>> Intmain no existeix perquè el principal punt d'entrada per al codi
és en realitat al a partir del codi.
Pel que qualsevol codi que vostè té començant des del principi
realment serà executat en l'inici.
Així que això simplifica en gran mesura realment.
Noteu també, que no hi ha punt i coma.
No hi ha punt i coma en aquest idioma.
Poses una declaració en una línia individual
i després la línia següent representa un altre comunicat.
Si vostè vol posar declaracions mulitiple línia,
llavors vostè ha de separar per punt i coma.
Però en la seva major part, de bon estil, estem
mai va a veure un punt i coma per els efectes dels estats de separació
en veloç.
Llavors, com això realment funciona?
Doncs molt semblant a C que en realitat ha de compilar aquest.
I així podem fer que mitjançant l'ús c ràpida i després 1.Swift.
I després després d'un parell minuts Això compilarà
i després puc córrer el punt primer.
I del que s'acaba de dir "Hola CS50."
Impressionant, de manera que anem.
Aquí està el nostre primer programa hola món.
Anem a passar a la número dos.
>> Ara a esto-- això ha canviat poc, perquè mentre que normalment
fer--, de fet, sempre s'ha de compilar una aplicació ràpida abans
realment executi un it-- de les grans característiques
que he al·ludit abans era que ràpida en realitat es pot utilitzar a classe
d'una manera pseudo-interpretatiu, hi ha és, de fet, com un intèrpret.
Però el que això va a fer és no és, de fet, una aplicació ràpida
que es pot executar.
>> Així per exemple, si només ha de teclejar ràpid aquí, el que succeirà
és que vostè obtindrà un missatge.
I vostè pot escriure la seva ràpida codi, imprimir hola, i executar.
I serà en realitat print-- bé, no es va imprimir en aquest cas
perquè imprès a centrada cap a fora, que no és visible aquí.
Però en realitat és capaç de funcionar.
I així, en aquest cas, només sóc utilitzarà això com un guió.
I jo realment puc executar aquest codi allà.
Així que la forma en que realment em trobo serà una mica diferent,
però veuràs que en un moment.
Ara, en aquest cas el que anem de fer és definir primer una variable.
Així que això és com definim una variable en ràpid,
Som nosaltres fem servir la paraula clau let, seguim pel nom de la variable,
i després proporcionem alguns la inicialització de les dades opcionalment.
Així que aquest cas estem definint una constant anomenada nom,
i farem servir això en la sortida de la nostra línia d'impressió
al, hola nom molt inferior.
>> Ara adonar que en lloc d'utilitzar% s, podem encapsular el nom d'aquest
variable en / () i ser capaç de concatenar en els continguts d'aquesta
cadena en aquesta cadena.
Ara a diferència de C, cadena és un tipus real actual en ràpida.
I pel que es troba al costat de ints i juntament
doblega molt fàcilment i, naturalment, en comparació
a alguns dels altres llengües que hem vist.
Així que això realment funciona de la mateixa manera que es pot esperar.
>> Puc córrer 2.swift.
I veiem que el meu nom és en realitat empalmat a "Hola Dan."
Acceptar, impressionant.
Passant el número tres.
Ara era una mica d'una mentida piadosa que jo
va dir que la forma en què declarem les variables va ser utilitzar la paraula clau let.
Com tantes vegades com li sigui possible de fer vulgui utilitzar deixar, perquè el que fa
és que defineix una constant.
I això diu ràpid que puguis optimitzar la velocitat de la seva aplicació
perquè sap que aquest variable no canviarà.
>> Així que avaluar acuradament quan vostè va a utilitzar
una variable per al efectes de canviar-lo.
I quan vas a crear una variable simplement
per mantenir algunes dades i que és en realitat no canviarà.
Així que aquest concepte d'immutabilitat, que no és en realitat canviarà,
és important fins i tot quan baix com la definició de les variables.
Així que aquí hem definit un nom, deixar nom, i en aquest cas
És una constant, que és de tipus cadena, i és igual a Dan.
>> Així que mentre que en l'anterior versió, infers-- i per "això"
Em refereixo a ràpid swift-- s'infereix el tipus de dades
que hem entrat en la variable.
En aquest cas, podem estar explícit.
Així que llavors el nom d'aquest variable és el nom, després dos punts.
I després dels dos punts que fer especificar el tipus de dades.
Així que ja no és int nom o nom de la cadena o alguna cosa per l'estil.
Però en comptes de deixar etiqueta, estem definir si o no
que és constant o variable, seguit pel nom,
seguit pel tipus opcionalment.
>> Així que en aquest cas estem definint aquest nom és una cadena.
Estem dient és Dan.
I ara tinc una altra variable, en aquest cas es diu etiqueta.
Però noti que és prefix amb la paraula clau var.
Els mitjans de la paraula clau var que aquesta variable pot
canviar en un moment posterior a temps, en algun lloc en el codi
podem realment canviar i no ens donarà cap error particular.
>> Podem fer concatenació estàndard operador aquí amb el símbol més
per afegir realment la nostra nom en aquesta cadena.
I després podem imprimir com vam veure fa un moment.
Ara diguem que vostè voler crear una variable
però vostè no desitja inicialitzar encara.
Vostè encara no vol posar totes les dades en el seu interior.
Bé, vostè ha de dir-li ràpida el que el tipus de dades
serà abans que puguis en realitat definir correctament.
>> Així que en aquest cas, quan hem definit un grau variable anomenada hem de ser
explícita sobre el seu tipus, perquè no es pot deduir simplement buscant
en les dades inicialitzat que proporcioni a la mateixa.
Ens donarà un error si es només grau var tipus, per exemple,
perquè no té cap tipus, per tant.
Així grau = 100.
Així que 100 és un nombre sencer, es encaixa molt bé en això.
Es seguirà funcionant.
Podem veure com llavors poden concatenar en aquest.
Ara vostè pot ser temptat, si realment
volgut per concatenar el grau en una altra cadena de text,
en una altra cadena, que ho faria només utilitzar aquest mateix operador concatenació.
I això seria normalment ser veritat.
Però ràpid no li permetrà canviar implícita del tipus de dades.
Així que en aquest cas, aquesta línia 25, es produirà un error
perquè grau és una nombre sencer i no una cadena.
I el que hi ha un desajust conjunt de tipus.
Així que cal ser explícit quan voleu canviar aquestes dades,
quan es vol forçar aquesta dades en un tipus diferent
i dic bé, vull prendre aquest grau, que és un nombre enter,
i convertir-lo en una cadena.
>> Així que em prenc Cadena majúscula s tota la tipus, et donaràs compte, es capitalitzen,
Int, Doble, String, així successivament i així successivament.
Tots ells són capitalitzats només per fer les coses més fàcils.
I direm capitalitzar Cadena passar-hi grau.
I es crearà una cadena d'aquest sencer.
I després podem concatenar els dos molt bé.
Teniu preguntes sobre aquest assumpte fins al moment?
Molt bé, anem a llaurar fins al número quatre.
>> Ara anem a parlar sobre alguns més avançat estructures, com les matrius i bucles.
I a diferència de C, les matrius en ràpida no estan representats per punters.
Punters en ràpid, tot i que existeixen, anomenat
com punters insegurs o algun tipus similar com això,
que no estan exposats a que normalment.
Així es fa molt difícil per manipular
la memòria directament del seu ordinador.
>> Així que les matrius són només un tipus de dades.
I estan referenciats utilitzant aquest tipus notació d'ara estàndard claudàtor
que has vist abans.
Però quan vostè realment vol definir un tipus d'una variable
com una matriu d'alguns tipus particular, llavors vostè
posar aquest tipus entre claudàtors.
Així que el que estic dient aquí és que Estic creant una variable anomenada
graus de tipus int matriu.
I estic establint que igual a algun dades inicialitzats, que en aquest cas
és 100, 0, 90, 85, que es troba a col·lecció de graus arbitràries aquí.
Ara bé, en aquest cas vaig poder, recordi, treure el tipus,
i seria capaç d'inferir que basat en les dades inicialitzats.
Però si em treu això i Que necessitava per posar-ho més tard,
llavors jo hauria d'assegurar que tinc el tipus allà.
Molt bé, anem a passar al llarg.
Així que can-- arrays ens proporcioni una varietat
de mètodes a través que la notació de punt en què són probablement ara familiaritzats.
Així grades.count, per exemple, ens diu amb precisió el nombre
d'elements que són continguda dins d'aquesta matriu.
>> Si vull afegir additional-- ara adonar que aquesta és una var
i no-- aquesta és una variable i no una constant, que
vol dir que puc canviar el contingut d'aquesta matriu, puc afegir objectes a la mateixa.
Però no puc dir simplement graus i després entre claudàtors
4, perquè això serà un fora dels límits d'error en aquest cas.
Si vull en realitat el canvi La mida d'aquest array,
He de fer servir el mètode append punt per afegir alguna cosa en el final de la mateixa.
Puc, però, el canvi índexs individuals.
>> Així que podria utilitzar graus i els suports llavors quadrats
zero a manipular aquesta primera índex i etc., igual que s'esperaria normalment.
I puc fer el mateix per realment rebre les dades dels quals també.
Ara també hi ha una mena de mètode de fantasia d'aquesta manera, els graus més iguals
i després un altre índex, que append--
o no una altra index-- però una altra llista que
s'adjuntarà aquesta llista a la part posterior dels graus.
I els graus serà contindrà llavors tot això.
Però això és una mena de cosa extra que jo només t'estic mostrant per diversió.
>> Ara hi ha un bucle for.
I aquest és el començament d'on les coses comencen a canviar una mica.
Observeu com aquest cicle for és diferent dels bucles en C.
Ara vaig a assenyalar que per bucles en Swift pot
ser fet per semblar per bucles en C, però hi ha una gran quantitat de construccions més útils
que essencialment eliminen la necessitat a tenir per var i és igual a 0 i punt i coma
és menys de certa extensió, etc., etc., no?
I aquesta construcció és només un d'ells.
>> Pel índex, l'índex és nou variables, en aquest cas, en el rang.
I el que estic dient és que hi ha un rang de 0 tot el camí fins
però sense incloure grades.count.
Així que aquest punt punt menys de signe representa
un rang de valors a partir de zero tot el camí fins a grades.count almenys 1.
Hi ha una separada operador que existeix,
que és dot dot dot, que faria vull dir que vull que el rang de zero
a comptar graus inclòs.
>> Però en aquest cas, pel fet que aquests matrius són índex de zero, és clar
no volen anar a la màxim nombre de graus.
Puc resumir els graus, com pot ser que esperar, i la sortida de totes aquestes coses.
Bé, de seguir endavant.
Ara anem a parlar sobre les funcions.
Per tal de definir una funció utilitza la paraula clau funk.
I de nou, en Swift ha de tenir molta cura amb els tipus.
Vostè proporcioni a que els paràmetres mitjançant la definició de, per exemple,
el nom del paràmetre i Després, en confrontants, el tipus de dades
que s'espera que paràmetre per acceptar.
>> Així que en aquest cas tenim una funció anomenada recompte grau d'impressió.
Accepta una variable anomenada llibre de qualificacions, o més aviat un paràmetre anomenat llibre de qualificacions.
I estem esperant que del llibre de qualificacions ser una matriu d'enters.
Si aquest llibre de qualificacions és buida, anem a imprimir una cosa.
En cas contrari, anem a imprimir el nombre dels graus que això té en realitat.
>> Ara bé, si volem tornar algun valor, llavors la manera
que modifiquem aquesta definició és utilitzar realment aquesta paraula clau fletxa,
o per utilitzar aquesta fletxa significant.
Així que aquí definirem una funció anomenada mitjana.
Anem a acceptar una llista de nombres.
I tornarem a doble, que s'espera que
la mitjana d'aquesta matriu.
I per fer això, per tal per al càlcul d'aquesta mitjana en realitat,
anem a fer una suma i li doni Per descomptat resumir tots els objectes
dins d'aquesta matriu.
>> Observeu que hi ha una nova estil de bucle for aquí.
No hem de ser explícit sobre iterar sobre cada element,
però en comptes d'això podem dir amb grau i del llibre de qualificacions, significat
que per a cada element que tenim en aquest,
disposar que en aquest tema anomenat de grau variable.
I vull fer alguna cosa amb ell.
Així que vaig a resumir totes aquestes dades i en realitat tornar el doble divisió.
>> Ara noti de nou aquí hi ha el concepte de divisió d'enters a Swift.
Si voleu duplicar divisió perquè vols decimals,
llavors vostè ha de ser explícit, no només d'una banda,
perquè no permetrà que vostè per obligar a les dades a banda i banda d'aquest,
vostè ha de realment curs ambdues parts en dobles
pel que vostè és molt explícita sobre d'assegurar
que estàs fent doble divisió.
>> Anem a passar.
Així que si jo realment vull accept-- pel que en aquest exemple particular,
això és encara una ordre aplicació basada en línia.
I estem començant a veure alguns les limitacions de la llengua jove
en que tot i el que puguem accedir als arguments mitjançant l'ús de
aquesta process.arguments, és Encara no necessàriament el més net
El que hem vist mai.
Però, bàsicament, us animo mirar espècie d'aquest codi
i tractar d'esbrinar què és exactament el que està passant.
>> En essència el que està succeint és que estem tenint una llista d'arguments
i van ser coaccionant a sencers, i llavors estem
va a utilitzar això com una manera d'imprimir la mitjana de tots els graus.
Canviant de tema.
Ara hi ha un altre tipus de data-- un altre tipus de dades en lloc d'arrays
anomenats diccionaris, que són molt a hashish, taules o mapes de hash
i són similars també Matrius associatives de PHP.
Així que tenen la noció de claus i valors.
>> I estan definits també amb aquesta notació de claudàtors,
però la diferència és que els diccionaris tenen
dins els claudàtors, dos punts.
I el còlon separa les dades escrigui aquesta és la clau i el valor.
Així que en aquest cas, jo vaig a crear un diccionari per acceptar alguns graus.
I serà del tipus de cadena: int,
el que significa que la totalitat de la claus seran cadenes,
i tots els valors d'aquells claus seran sencers.
>> El que això significa és que puc després fer referència a les dades específiques
que vull usar aquestes tecles en lloc que l'ús d'índexs numèrics com jo
tindria per una matriu estàndard.
Ara anem a veure, hi ha una cosa important
que també vull esmentar sobre aquesta seqüència particular de codi.
I és que hi ha un altre tipus de dades,
o més aviat hi ha aquesta idea de dades que és
continguda dins de Swift diu opcionals.
>> I el que significa és opcionals que reconeix el fet
que de vegades un no va a obtenir les dades que realment esperes.
I així el que vull dir amb això és-- anem fer una ullada a aquesta seqüència de codi
que itera sobre tota la arguments que s'han passat a aquest codi
i tracta de convertir-los, tries a dividir-se en una varietat de cadenes,
perquè accepta una molt en particular el tipus d'argument.
I després es va a tractar de coaccionar les cadenes que representen nombres
en sencers que són graus, que llavors puc calcular.
>> Així que, bàsicament vaig a utilitzar aquesta funció de divisió que
existeix dins del Biblioteca estàndard Swift.
Vaig a passar-hi la cadena que vull dividir.
I després, en l'ús d'aquest espècie de sintaxi covard, que
No sé si anem a aconseguim, però potser, ens
en realitat especificar la precisió personatge que volem dividir.
Què això realment sembla?
Fem una ullada a realment executar aquest codi.
>> Així, per exemple, direm que tinc un concurs i em van donar 50 en això.
I tinc un conjunts de processadors i Tinc un centenar en això.
I jo got-- hi ha una altra concurs i em van donar un 40 sobre això.
Vaig colpejar Enter, i, finalment, el que passarà és que el que està fent
s'està duent a aquests paràmetres, la divisió les cordes en aquests dos punts,
reconeixent que hi ha dos elements en cada un,
i és essencialment fer el seguiment de cada un.
>> Així que tinc en el meu diccionari un concurs, el valor es representa pel nombre 50,
Tinc un PSET que té un valor de 100, i una prova que té un valor de 40.
Després, més tard en el codi I en realitat la mitjana tots aquests valors
i una llista de totes les tecles de que diccionari particular.
Però això és important de manera que vostè pot notar
el que està succeint, és que el que voler fer és prendre aquesta cadena
i dividir-lo en aquest caràcter, que podem fer de nou amb aquesta divisió
funció utilitzant aquest tipus de interessant sintaxi que existeix aquí.
>> Només per ara assumeixen que això està bé.
Veurem més en aquest en tan sols una mica de temps.
Però ara hi ha una interessant aspecte que en realitat
intentar convertir aquest cadena en un enter.
Però en altres idiomes el que podria succeir és
que probablement provaria fer-ho i, o bé tornar
una mena de sentinella valor com un negatiu
o potser un nul o alguna cosa per l'estil.
O potser seria just provocat un error.
I hauríem de després agafar aquest error
i després tractar de fer alguna cosa basat en el fet
que aquesta conversió a un enter fallat.
Aquí és on aquesta idea d'opcionals ve en.
En realitat es pot crear un tipus de dades és un signe d'interrogació int, per exemple.
Això significa que aquest sencer és, de fet, opcional.
¿I què passarà és que es pot contenir un nombre enter, o potser no.
Es pot, de fet, ser aquest altre idea, totalment diu nul·la.
Pel que això vol dir que hi ha cap valor en aquest.
Ni tan sols és zero, simplement no hi ha valor.
No hi ha absolutament cap valor representat.
>> I això és el que aquesta línia 71 està fent.
És que s'està dient que jo desitgi per intentar establir un valor,
una variable anomenada grau, igual a la conversió d'aquesta cadena en un enter.
Així que m'he pres aquesta cadena, aquesta primera components,
o més bé la segona components, perquè aquest
s'indexa zero, d'aquesta cadena que he dividit.
I vull convertir que a un sencer.
Però no sempre pot procedir normalment, perquè imaginar
¿Què passaria si, en lloc d'escriure un nombre, que el tipus de curs com asdf.
>> Es va a fallar.
No és en realitat serà capaç de convertir un enter que
com m'esperava.
Així que en lloc de expulsar fora algun tipus d'error,
tenim aquesta idea d'una opcional.
I això vol dir que l'ús de aquest signe d'interrogació el que puc dir,
Bé, és possible que jo pugui prendre això, es converteix en un int,
i el va posar en una variable, que també serà un int.
Si és així, que els mitjans que aquest va ser un èxit
i aquesta primera part de el bloc pot continuar.
>> En cas contrari, no.
No hi ha valor en grade-- o més aviat no hi ha cap valor en existent,
i jo en realitat he de tractar de gestionar aquesta condició d'error.
Vostè va a veure això signe d'interrogació tot el temps
en Swift i en l'exemple de codi per Swift.
I de fet, l'operador nill, aquest tipus de signe d'interrogació, la part opcionals,
serà probablement un de les coses més difícils
per embolicar espècie del seu cap al voltant com en realitat es treballa amb ell.
>> Podria tenir sentit ara.
I de fet, quan jo era escriure codi d'exemple per això,
certament vaig entendre el que estava passant,
però tot i així em va agafar per sorpresa de tant en tant
quan m'anava a trobar que algunes dades eren en realitat
una versió zero, una versió opcional de les dades que jo esperava.
Així que adonar-se que si tenir una versió opcional
has de desempaquetar que les dades d'aquest quadre.
>> Així que és una cosa així com jo-- imaginen si tenir una caixa i conté alguna cosa.
I el que cal fer és fer la pregunta,
és possible que aquest quadre de realitat conté les dades que estic buscant?
Si és així, a continuació, tiri cap a fora que les dades i posar-ho en aquesta variable existent.
Si no, llavors només he de no tenir en compte el contingut d'aquesta caixa de
complet, ja que literalment no conté res.
>> Per a qualsevol dubte sobre això?
OK, anem a passar lluny d'aquesta tipus de coses basat en la línia d'ordres
i començar a buscar a part de la tecnologia
que Xcode ofereix a nosaltres en forma de parcs infantils.
Així que hi ha una gran quantitat de capacitat d'aquí amb Swift.
I si vostè obre Xcode i li pregunta el que vols fer,
vostè pot obrir el pati d'esbarjo i simplement jugar
amb un munt de diferents estructures i aspectes de la llengua
fins i tot abans de començar tocant el SDK de iOS o Mac SDK.
>> Així que aquest cas, diguem que em tener-- Tinc un exemple relativament artificial
aquí, però tinguin paciència amb mi mentre espècie de treballar a través d'aquest exemple.
Diguem que hem de fer molt d'exponents amb un valor fix,
com sabem que haurem de fer un munt de poders quadrats, per exemple.
Així que anem a portar el seu valor x, anem a la plaça que,
anem a portar el seu valor i, i anem a quadrar ella.
Així successivament i així successivament.
>> Ara podríem en realitat només crear un potència de 2 funció d'això, oi?
Així que crearíem una potència de 2 funció.
Acceptarem un doble.
Anem a output-- o anem a retornar un tipus doble.
Prendrem aquest resultat i després per dues vegades
el que en realitat prenem els resultats, que va ser la inicialitzat amb el valor d'un,
i es multiplica per x.
Així que, en essència, tenim x vegades x aquí.
>> I així llavors pot llavors, com podríem esperar, pren això, poder executar de 2,
proporcionar a ella algunes dades, m'agrada 2.0.
I anem a veure els resultats aquí 4.0.
Executeu potència de 2 a 3.2 i arribar a veure el nostre resultat, 10,24.
Fins aquí tot bé, no?
Ara estem pensant, bé, OK.
Ara jo realment necessito fer un munt de poders de 3.
Així que vaig a copiar enganxar tot aquest codi, canviar el nom de la funció de
potència de 2 a potència de 3, i tot serà el mateix a excepció d'aquest valor
aquí, d'aquest rang, 1 ... 2.
>> Així que en comptes de repetir aquest bucle dues vegades,
Vull repetir aquest cicle tres vegades.
Així que acabo de canviar aquest valor de 1 a 3-- o més aviat 2-3.
Així que de nou, el mateix codi, aquest és l'únic canvi.
Ara bé, això també funciona.
Poder de 3 proveït d'algun valor de 2.
Tenim 8.
Així 2 cubs.
I 3,2 cubs és 32.768.
I fins ara tan bo, oi?
Però esperem que això és una mica mica d'una bandera vermella per a vostè
que ara tenim certa duplicació de codi
a excepció d'alguns molt menor canviar d'una a la següent.
Llavors, hi ha alguna manera que podríem ser capaços de simplificar
aquest problema, en el que puguem en realitat, en temps d'execució, esbrinar alguns,
ens proporcioni alguna funció que té precisament el poder de la qual volem.
>> I hi ha aquesta idea de tancaments, que és molt, molt
important en el context de Swift, i en molts altres idiomes.
Però probablement veurà s'utilitza més en Swift
perquè està incrustat dins de la llengua
del que serà en una altra també les llengües modernes.
Així que la idea d'un tancament és això, és que tenim
pot tenir una funció que es pretén ser una funció genèrica, un poder genèric
de la funció.
>> I aquesta funció va a acceptar aquest exponent que en realitat
que vulgueu crear.
Així, per exemple, la primera instància, volíem una potència de 2.
Així que ens proporcionarà el poder de i després en parèntesi 2.
I ara el que compta això en realitat retorna.
Aquest pren una entrada d'un encebador trucada i que és un nombre enter,
i retorna aquesta boig buscant El parèntesi parentheses--
doble i després fletxa doble.
>> El que això significa és que sóc va a tornar una funció.
No vaig a tornar un altre tipus de dades, estic
De fet torna una funció que té aquest paràmetre, que
accepta un doble com a entrada i emet una doble com a valor de retorn.
I com a resultat, perquè ara he anomenat poder de, passant en algun valor per i,
i estic creant aquest altre avís function-- que hi ha
Una altra funció que s'està creant dins això- el que estic fent
és que em llavors puc canviar aquest valor, que un
valor que jo havia canviat 2-3, ara em faig i.
>> I això persisteix.
Així que cada vegada que jo anomeno el poder de, essencialment el que passa
és que puc tornar una funció.
Noteu que aquí he definit una nova variable anomenada plaça.
Ho he instal·lat igual a la força de, sempre que aquesta 2 al poder de.
I el que això retorna és la funció.
Així quadrat, la variable quadrat, que és ara de funció de tipus
que té esto-- Ui, desplaceu-vos fins a un poc bit-- que té aquesta firma,
acceptar una doble i una doble sortida.
>> Així que ara el que he fet és que he essencialment
creat una plaça funció trucada que accepta qualsevol valor i s'enfrontaran ella.
Podem veure el que passa aquí.
Plaza 3, per exemple, vol dir que vaig prendre el valor 3 i quadrat ella.
Llavors, com ho fa exactament aquesta feina?
Quan pas el poder de 2-- quan passar 2 en aquest poder de la funció,
aquesta variable i és poblada amb aquest valor 2.
I això és una espècie de lloc en la memòria.
Això és una cosa així com lloc a estat en algun lloc en l'equip,
realment no importa com o on en aquest punt.
>> Però torno a aquesta funció anomenat exponenciar.
I de nou, no importa realment el que aquesta funció es diu,
realment podem anomenar alguna cosa, que accepta un doble i retorna un doble,
però utilitza aquest valor i dins d'ella.
Així que tot i ser aquesta funció, aquesta funció exponentiater que és
ha tornat de nou a la meva variable que vaig trucar a la plaça,
ha contingut dins d'ella aquesta noció del que era i.
I recorda que.
>> Així que cada vegada que cridar a aquesta funció que ara es diu quadrat, utilitza això.
Però això també significa que puc crear una altra variable utilitzant
un poder diferent de.
Així que puc crear una variable de cub, per exemple, proporcionar a la mateixa potència de 3.
Ara cub realment portar el seu valor i el cub que i el torna.
Així podem veure que obtinc un valor de 8 d'això.
>> Però aquest valor i no té canviat perquè són
celebrada en espècie de les variables independents.
Són una espècie de lloc en espais independents a la memòria.
Així cub tindrà sempre xa la potència de 3.
I la plaça tindrà sempre x a la potència de 2, que
significa que la plaça serà sempre nombres quadrats, com espero.
I cub sempre en cubs nombres, ja que esperen.
Això vol dir també que de vegades es pot obtenir algun tipus de sintaxi funky cerca
on vostè té el poder de manera part inferior de la pantalla d'aquí, el poder de 5.
I es passa en el resultat.
Vostè crida a aquesta funció que és estat retornat amb el número 4.
I així, el que en essència aquesta és 4 a la cinquena potència,
podem veure els resultats allà.
Amb mi fins ara?
>> Així que aquesta idea es diu un tancament, perquè el que estem fent bàsicament
és que estem encapsulant algunes dades into-- espècie
de tancar aquestes dades en una funció i estem
ser capaç de tornar a utilitzar aquesta funció.
Ara aquesta sintaxi encara que en realitat pot simplificar una gran quantitat.
I hi ha un munt de possibilitats en Swift per aquesta simplificació.
I això és quina classe de la les subsegüents realment miren.
Així que en 7b per exemple, ens prendre aquest mateix codi.
>> Però ara en lloc de en realitat definir una funció
dins d'aquest poder de funcionar i donar-li un nom,
i després tornar el nom d'aquesta funció, la qual
a continuació, s'utilitza com a part de aquest tancament, en lloc estem
només va a simplificar.
No necessitem aquesta funció per ser nomenat.
Així que aquest és el concepte d'un funció anònima on podem després
acceptar com a entrada, entre parèntesis aquí, la variable x que és de tipus doble.
>> Anem a tornar el doble tipus.
I després la paraula clau, n, és el començament d'aquesta funció.
Així que adonar-se que tot això és entre claus
i estem definint un anònim funciona aquí.
Tot just una manera simple de definir exactament el mateix.
D'acord?
Però espera, Swift en realitat ens permet anar més enllà i simplificar encara més,
perquè realment no ho fem importa que aquest paràmetre és
anomenat qualsevol cosa en particular.
Realment es pot trucar qualsevol cosa i encara podem usar aquest primer paràmetre.
>> Així que en realitat no és aquest especial tipus de dades en funcions anònimes,
hi ha aquest nom especial de variables en funcions anònimes
que inicio amb la signe de dòlar i representen
els números de paràmetres, zero indexat, per aquesta funció.
Així que hi ha un parell de coses que succeeixen.
Aquí em vaig a tornar, i després un claudàtor representa una funció,
Oi?
>> Tingueu en compte que jo no he definit el tipus de paràmetres o el tipus de retorn.
En realitat, pot inferir perquè de la signatura
d'aquesta funció original.
Així podem eliminar que com una possibilitat.
Però també puc utilitzar el signe de dòlar a zero representar aquesta primera paràmetre que és
passat a aquesta funció anònima.
Així que simplificar encara més.
D'acord?
Fins ara, tot bé?
>> Ara és aquest type-- fer recordar aquest signe de dòlar zero
que vam veure en aquesta clau de que vam veure una estoneta
Fa en aquest Swift 06:00 exemple?
Va ser just aquí.
Noti que és exactament el que estem veient,
és que hem passat en aquesta funció de divisió
una funció anònima que comprova el primer paràmetre
per veure si és igual a el símbol de còlon.
I això és exactament el que és passant, és que tots
estem doing-- el retorn paraula clau està implícita
en aquest cas-- que estem tornant aquest valor en el qual estem comparant
el primer paràmetre contra aquest caràcter de còlon.
I així, aquest tipus de desmitifica això.
I vas a veure aquesta construcció molt en la sintaxi Swift, també ho fan mantenir aquesta
en ment quan estàs fer una ullada a això.
Ara podem baixar els carrils una mica
i anar realment de luxe que mostra fins i tot una mica més de poder de Swift.
Vostè podria fins i tot veure alguns d'aquests en els codis de mostra.
Així que per això em vaig per mostrar això.
>> Bàsicament el que podem fer és que, en primer lloc de tot, que era una espècie de sobres per a mi
per posar en pràctica tot aquest poder de codi perquè si importa Darwin
biblioteca, que en realitat inclou una funció de anomenat pow que ho fa per vostè.
Així que podem simplificar encara més i tenim la nostra funció de potència fins ara només
ser un meravellós un traçador de línies en què només tornar aquesta funció anònima que
accepta el signe de dòlar 0 com la seva i com a base i el seu exponent.
>> Però podem aconseguir realment, molt elegant quan
adonar-se que Swift té un molta potència sota el capó.
Molts dels operadors que hem estat tractant,
a més dels signes i símbols de divisió i totes aquestes coses que normalment
operar amb tipus de dades en un llenguatge de programació,
en realitat són extensibles a Swift.
Així que el que significa en la qual pot definir els nostres propis operadors.
>> Així que ara estic cansat d'escriure en tot això pow i després un parèntesi i després
la base.
Jo no vull fer això.
Realment vull tenir una operador que em permet fer això.
Així que puc dir Swift que vull per crear un operador, estel
star-- per cert que no puc fer servir el quirat perquè el quirat és un operador que
fa cosa completament diferent.
Així que no vull per ordenar de topar amb això.
I així, el que es veu en una varietat d'idiomes, incloent Python,
és com a operador estrella estrella per representar els exponents.
>> Així que aquesta és l'única raó ¿Per què ho he fet.
I serà un operador infix tipus.
I he de facilitar a ell alguna informació
sobre la prioritat d'aquesta operador pel que és associativa esquerra.
És com relativament alta prioritat en comparació
a sumatòria o multiplicació.
És major precedència que tot això.
Així successivament i així successivament.
I llavors jo defineixo la funció que en realitat
dicta el que aquest operador.
Així que suposant que tinc una esquerra costat i costat dret,
que seria potser una nom millor variable per això.
Costat esquerre i costat dret.
Llavors puc tenir aquest poder del esquerra a la dreta
i tornar aquest valor.
Així que ara és super dolça.
Tot el que hem de fer és estrella 2 estrelles 3 i que és 2 a la tercera potència,
i obtenim un valor de 8.
Estrella 2 estrelles 10 és 2 a la 10a potència, obtenim 1024.
>> Així que ara el nostre poder de la funció, que de nou és diferent,
perquè la idea darrere d'això és que tenim una funció que
sempre té algun valor i multiplica it-- o més aviat
pren l'exponent de la mateixa potència.
Així que ara és encara més simple.
Així que ara és només dòlar mostra de l'estrella 0 estrelles i.
Ni tan sols hem de fer servir presoner de guerra més.
>> Acceptar, que ha perdut?
Ho estem fent bé?
Qualsevol pregunta sobre aquesta matèria?
Sí?
>> AUDIÈNCIA: Quan usted-- [inaudible] el poder de funk de doble i.
Així que quan vostè està tornant una funció.
DANIEL ARMENDARIZ: Poder Funk de doble i.
Oh sí, jo no sé el que els números I són.
Ho sento.
>> AUDIÈNCIA: Per què estàs tornant una funció recinte [inaudible].
No és de zero dòlars estrella estrelles i [inaudible]
trobar que l'operador amb aquest tornar doble [inaudible] duplicar?
>> DANIEL ARMENDARIZ: Així que anem a em va contestar la seva pregunta
com jo ho entenc i em puc dir si jo no entenc la seva pregunta.
Així que aquesta construcció, la clau de signe de dòlar zero estrella estrella i,
és una funció.
I accepta un paràmetre que és representat per aquest signe de zero dòlars.
La paraula clau return està implícit en aquest molt curt, sintaxi de la funció anònima.
>> El que significa que essencialment el que això està dient
és que estic definint un function-- i després vaig a
simplement dir-alguna cosa-- on tinc algun valor i.
Tinc i, que és doble.
I m'estic tornant un doble.
I tinc dins d'aquest retorn I- ho sento, No hauria d'haver cridat a aquest I- x.
Oh estimada, oh estimada, oh estimada.
I estrella estrella X-- nope--.
>> Així que això és només una versió simplificada d'aquesta.
I així, la raó per la qual tinc dòlar signe zero és que l'ús d'aquest recinte
vol dir que ja no tinc per escriure presoner de guerra, o ja no fer
He de fer alguna cosa com un 3 estrelles 2 estrelles.
Jo només puc tenir un sol funció anomenada plaça
que sempre tindrà algun valor com a entrada
i de fet tornar a la plaça d'això.
>> Així tot el propòsit del tancament és per encapsular només una espècie de fet
que jo sempre vull usar i sempre Jo dic a això la funció com el poder
a prendre aquest exponent.
Així tornant llavors, un funció que accepta
un doble, que és la base, i retornant el resultat que l'exponent
és la clau aquí.
I aquesta és la principal diferència.
Només hi havia una mica d'un fermall d'or.
>> Això no és diferent en comparació amb els exemples anteriors,
però va ser només una mica de colofó ​​podem realitat
crear un operador a Swift i, de fet fer coses amb ell,
que és una espècie d'una cosa genial.
Jo responc a la seva pregunta?
Sweet.
Qualsevol altra cosa abans de seguir endavant?
D'acord.
>> Ara bé, aquest tipus de planteja la pregunta és que-- bé bé,
ara tenim la capacitat per funcions per a ser retornats.
Podem passar també funciona com a dades o com a paràmetres a altres funcions?
I de fet el que puguem.
Així que anem a dir que tenim totes del mateix codi.
Tenim la variable quadrada que s'enfrontaran aquest codi.
I tenim la variable del cub que es cubicar algunes dades.
I nosaltres realment volem aplicar a una àmplia gamma de nombres.
>> Així que el que podríem estar temptats a fer, per descomptat, que és certament vàlid,
és per repetir aquesta llista de nombres i aplicar les meves funcions quadrat i el cub
i obtenir dues noves llistes com a resultats que són aquesta llista original quadrat
i en cubs, respectivament.
Perfectament acceptable.
Però, què és el que que veiem aquí és que tenim,
de nou, la duplicació del nostre codi.
I no hi ha tal vegada una oportunitat per a nosaltres per simplificar això una mica.
I si hi hagués una manera per a nosaltres en realitat sempre iterar sobre alguna llista
i només ha de passar a aquest màgic funcionar una variable que
representa una funció que volem aplicar
a cada article en aquesta llista.
Això porta a col·lació el concepte del que s'anomenen funcions d'ordre superior.
I això és en essència el que això És a dir, és que podem crear una funció.
>> I en aquest cas es diu un assignador, només per donar-li un nom, només
mapatge sobre cada cada element en una llista.
Quan prenc una llista i em prenc una funció.
I aquesta funció, és clar, té una certa signatura.
S'accepta com un doble paràmetre i és la sortida és un doble.
I tot el resultat de aquesta funció es va
a ser una nova llista que és de tipus double.
D'acord?
>> I el que jo faré és aplicar aquesta funció f
a tots els elements de la llista.
I reply-- i prefereix tornar aquest nou llista com un resultat, que és realment genial.
Ara puc passar funcions voltant.
I aquesta idea d'ordre superior funcions és realment important.
I això és realment només assignador aplicació dels pobres
d'una funció que es construeix en Swift anomenat mapa.
I ho fa precisament això, potser fins i tot una mica millor.
>> Aquesta és només una espècie d'un genèric, versió simplificada que
ens permet veure el concepte que s'aplica aquí.
Ara mira la manera com jo en realitat pot aplicar meva plaça
i les meves funcions de cub a aquesta llista de nombres.
Corro el meu assignador.
Proporciono a ella la meva llista de nombres.
Proporciono a ella la del funció que va
a aplicar a cada un d'aquests índexs.
I serà de sortida com a resultat.
I vaig a arribar a veure que he quadrat i en cubs meus números com a resultat.
>> I per descomptat el assignador tindrà qualsevol tipus de funció anònima.
Fins i tot podem veure que he creat una nova funció anònima que
només pren algun paràmetre i el divideix per 2.
I podem veure que tinc, de fet, dividit la cistella per 2 en comptes.
Refredar?
Fins ara, tot bé?
Molt bé, ara anem a tornar a aquesta idea.
Anem a posar en pràctica aquesta de tornada a el context d'un llibre de qualificacions.
>> I si faig això, podem veure que puc aplicar una àmplia varietat d'aquests options--
o una àmplia varietat d'aquests funcions d'ordre superior
per simplificar realment la meva capacitat per fer un varietat de coses en les llistes de nombres.
Així, per exemple, si tenir una llista de nombres,
una de les funcions d'ordre superior el que existeix es diu reduir.
El que fa més bé reduir de mapa, es redueix la voluntat
prendre dos elements a la llista, haurà alguna funció que
compara els dos elements de la llista, i ho farà a continuació,
espècie de output-- la de sortida d'aquesta funció
serà un altre element que que després comparar als altres.
>> Així que vostè pot utilitzar això per realment suma dels nombres de la llista.
Per exemple, si tinguessis una llista d'1, 2, 3, 4, 5,
a donar els primers elements, 1 i 2.
Es pot aplicar a ella una addició funció que pren aquests dos elements
i escup un d'aquests elements, el que seria el valor 3.
Després prenem el valor 3 amb el següent element de la llista, sumar aquests dos,
i després seguir per la llista.
>> Estem reduint el llistar a un sol valor.
I dóna la casualitat que el signe més
és un operador, com acabem de veure.
Aquest operador és en realitat una funció que
té precisament aquesta llista que voldria, en comptes aquestes propietats
que ens agradaria.
Així que us animo a fer una ullada a això.
Vull a una espècie de moviment des d'alguns d'aquest codi
pel que en realitat podem veure algunes real veritable veritable Swift, a Xcode,
en el desenvolupament de iOS.
Però fer una ullada a això i veure si pots
analitzar a través del que està passant amb alguns d'aquests d'ordre superior
funcions incloent filtre, reduir, i vostè fins i tot
veure en algun lloc d'aquí el mapa també.
Està aquí mateix.
On tindrà una seqüència de les qualificacions i el farà realitat
assignar des de la construcció switch, que és possible reconèixer de C,
però en realitat és molt més poderosa que la construcció switch
que tenim en C.
>> I anem a aplicar això a cada element de la llista
i en realitat proporcionar el grau de la lletra de cada
d'aquests graus que utilitzen tots aquests conceptes que només hem parlat abans.
Ara anem a eludeixen per només una minut i parlar d'estructures.
I així les estructures són una espera a C que van ser capaços de definir un nou tipus de dades.
Hi estructures dins de Swift.
I també ho fan moltes altres construccions denominats enumeracions i classes, que en realitat
portar aquesta idea a un nivell completament diferent.
>> I, bàsicament, és només una manera de definir un nou tipus de dades.
Així que si vostè get-- si véns a través de classes o estructures o enumeracions,
no es confongui per ella.
És només la forma de definir algun nou tipus particular de dades.
I això és molt important a l'hora estem parlant de desenvolupament d'aplicacions iOS
perquè tot el que Hi dins de l'aplicació per iOS
és essencialment un objecte d'algun tipus.
I un objecte és bàsicament una classe o una enumeració o una estructura.
>> Així que en aquest cas jo sóc la definició d'un nou tipus de dades
que estic trucant avaluació això és algunes propietats, incloent
un nom i una seqüència de notes.
Així que un tipus d'avaluació que jo podria tenir en compte
seria concursos, per exemple.
M'agradaria tenir un avaluació que era un concurs
i que tenia una varietat de graus associat amb això, per a prova un,
concurs de dos, així successivament i així successivament.
>> O podria tenir un tipus diferent d'avaluació per als butlletins de problemes.
I jo puc fer les coses.
De fet, puc tenir funcions dins d'aquest tipus de
de les dades, que ara són anomenats mètodes.
Així que si mai veure la mètode de paraules, el que realment
és només una funció que s'aplica a una classe molt específica,
o a un tipus molt específic de dades.
Ens permet modificar les dades dins.
>> En altres paraules, si vull afegir una nota a la meva avaluació,
llavors tot el que necessito fer és afegir la puntuació que es va introduir
a aquesta funció per la meva propietat interna.
Hi ha un altre constructe endreçat aquí en Swift, que és aquest punt punt punt
operador, el que significa que les puntuacions pot ara acceptar qualsevol nombre d'enters.
I puntuacions seran un matriu d'enters que
s'han passat a la meva funció, que vol dir que jo puc fer coses com aquesta.
>> Jo puc fer afegir notes i simplement proporcionar nombres arbitraris de nombres enters en ell
i en realitat ser proporcionat una matriu d'aquests valors en la meva funció
o en el meu mètode, com és el cas.
Ara bé, això és important perquè tot en Xcode, tot en iOS,
és de fet un objecte.
Així que tingues-ho en compte quan ens rebentem Xcode obert
i passi per davant més enllà de iOS versions de dos i tres
i de fet passar a la versió de quatre.
>> I de nou, tot això ho farà es publicaran a la pàgina seminari.
iOS 4 és una espècie de tota regla implementació d'una aplicació molt bàsica.
I el que aquesta aplicació fa és que carrega una interfície d'usuari, que s'assembla a això.
Un cop més, si fem clic sobre guió gràfic podem veure que això és el que sembla.
Aquesta és la interfície d'usuari.
Té un títol a la part superior.
Jo he trucat galeria web.
>> Al mig hi ha un element anomenada la vista de la imatge d'IU.
I a la part inferior hi ha una barra d'eines amb un sol botó que
té espais elàstiques que permeten centre en el mitjà d'aquesta barra d'eines.
I el que passa és que quan aquest càrregues es descarrega un arxiu JSON que és
continguda en un servidor en un altre lloc, analitza aquest arxiu JSON,
i l'arxiu JSON sembla una mica a això.
L'arxiu JSON són aquestes.
Aquí està.
>> Té un nom d'àlbum i que té una sèrie de fotos.
Cadascuna d'aquestes fotos tenir un nom i també
una URL mateixos que representen el versió jpeg d'aquesta foto individual.
Així que el que passa és que quan aquest programa càrregues, es descarrega l'arxiu JSON,
ho analitza, ho posa tot això en l'equivalent d'una matriu en iOS
desenvolupament d'aplicacions, que és un NSArray.
I llavors puc després carregar aquestes dades en una aplicació
i carregar a la meva pantalla.
>> Hi ha una imatge que es va carregar amb el botó a la part inferior.
Si faig clic a Obtenir imatge següent, llavors tira que la imatge de la Internet
i substitueix aquesta imatge a la vista de la imatge d'IU.
Així que vostè pot descarregar això i en realitat veure en el seu ordinador.
I construir i realitat compilar al dispositiu.
Però en essència el procés va ser això, a crear la storyboard--
o més aviat no create-- però seleccioneu el guió gràfic.
I en realitat we'll-- si no mente-- anem a prendre només un parell de segons
que en realitat li mostrarà com es va fer això.
>> Només perquè la manera com podem realment aconseguir això es fa una mica més
aparent.
Sol·licitud única vista, estic va a trucar a aquest seminari
quatre que representa aquest nombre particular.
Guardeu-lo a l'escriptori.
Bé, farem clic en el guió gràfic.
I el que jo faré és trobar la meva vista de la imatge,
arrossegueu-lo fins el meu usuari interfície i el centre de la mateixa.
Ara només centrant desgràcia no farà molt,
a excepció d'una pantalla és a dir aquesta mida exacte.
>> Així que podem convèncer-nos que per en fer clic en aquesta cosa doble cercle,
enderrocar aquest emergent menú aquí i canviant fins
per obtenir una vista prèvia, on anem a realitat tenir l'oportunitat d'obtenir una vista prèvia
Això farà realitat buscar en altres dispositius.
Com podem veure, ni tan sols veure que en aquest cas particular.
Així que vaig a tancar això per ara.
>> I jo vaig a seleccionar aquesta icona a baix en el mateix
part inferior de la pantalla.
Diu solució automàtica problemes de disseny.
Ho sentim, es va tallar a la part inferior.
Però si faig clic en això, el que GET és aquest pop up-- desaparegui.
El que jo entenc és que aquest avís em permet afegir restriccions que falten.
I en fer que llavors espècie de bloquejar
a la part central de la pantalla com jo podria esperar.
>> Ara bé, per aconseguir aquest botó a sobre d'ell, he d'anar a l'Editor.
Anar a: Inserir i feu clic Navigation Controller.
El que farà és que afegirà tot aquest altre component a la mateixa,
però en realitat vincular de nou al meu interfície d'usuari inicial.
I els detalls, un cop més, que no ho fan realment necessita preocupar-se per ara.
Però jo vull tenir un barra d'eines a la part inferior.
Així que vaig a comprovar Toolbar Shows.
>> I això proporciona dins del meu punt de vista, que ara està en un altre lloc,
podem veure que està vinculat per aquí.
Ara ofereix una barra d'eines a la part inferior de la meva interfície d'usuari.
Així que ara, en lloc de seleccionar un vista de la imatge, no puc trobar una etiqueta,
o més aviat una toolbar-- anem a veure, on és això?
Com es diu?
Un element button-- bar-- item-- sorry-- element botó de la barra.
Plop que hi ha i aplicar un parell espais de flexibles a cada costat
per centrar en realitat això.
Així que ara que he creat el meu interfície d'usuari, bàsicament.
I puc donar-li un nom per doble clic a la part superior
aquí i dient galeria web i així successivament.
Ara, de nou, es tracta d'elements d'existir per si mateixos.
I he de connectar al meu codi que
Que puc fer a portar de nou fins aquesta icona doble cercle,
es canvia de la vista prèvia.
La qual cosa, per cert, ara podem veure és ben centrat i quedarà bé
en una varietat de dispositius.
>> Canvieu a automàtic, que serà que aparegui el codi ViewController.
I ara aquesta part és important.
Per connectar aquests dos elements, el codi per a la interfície d'usuari,
selecciona l'element que que voleu connectar.
Així que en aquest cas, realment vol codificar
canviar la imatge que es contenia dins d'aquesta vista de la imatge d'IU.
Així que si vostè controla clic des la vista de la imatge i arrossegament,
t'adonaràs que vostè aconsegueix un petit bar, quan deixes anar tot això del pop
fins passarà.
>> I diu que ho farem crear una connexió.
I des d'aquí vull donar-li un nom, una mena de galeria.
Premeu Enter.
I això proporciona en realitat una galeria variable anomenada
que llavors puc fer referència al meu codi per canviar la imatge, per exemple.
Llavors, com aquest codi realment es veuen?
Doncs de nou, jo no vull passar molt temps en ella.
I us animo a descarregar-lo i fer una ullada.
Però un dels més aspecte important és el codi de
que en realitat obté una imatge.
>> Així que en aquest cas vull per aconseguir dins de les meves fotos
array, que està continguda dins de la meva classe.
Vull definir el nom i la URL que ha estat analitza fora d'aquest JSON.
En realitat demanar el dispositiu per obtenir la URL, per anar a buscar l'adreça URL d'aquesta,
i després recuperar les dades de el contingut d'aquest URL.
A continuació, convertir aquestes dades en una imatge fent-la passar a la imatge d'interfície d'usuari.
Així que de nou, aquests són tots els diferents tipus d'objectes, de diferents tipus de classes.
>> I llavors puc llavors posaré la meva gallery.image igual a la de dades.
I això és una espècie de la carn de la mateixa que en realitat és llavors
capaç de canviar el canvi de les dades de-- la imatge d'una a la següent.
Així que de nou, espero que ara moltes de les construccions
farà una mica més de sentit.
Observeu que hi ha una mica de signes d'exclamació aquí.
Els signes d'exclamació són essencialment relacionada amb els opcionals.
>> El que estic dient bàsicament és que sense revisar
per veure si hi ha dades dins d'aquest opcional,
Vaig a seguir endavant i assumir que existeix i desenvolupi ell.
Recordeu que nosaltres utilitzem l'analogia de una mena de paquet per als opcionals
i hem de desenvolupar el paquet i tiri de les dades fora.
El signe d'exclamació forces que realment succeeixen.
>> Però jo sé que això és segur perquè he comprovat
per veure si les dades d'imatge és igual a zero, de fet he verifique
per veure si això opcional era, de fet, fallat.
Si que tenia, de fet, ja ha fallat.
I així que estic segur que una vegada que arribi a aquest punt puc desenvolupar de forma segura les dades.
També pot veure-ho en la forma d'un signe d'interrogació.
Així que si ens desplacem fins a on jo necessitarà analitzar realment les dades.
>> Així que no es deixi intimidar per aquest tipus de noms llargs.
Vostè pot trobar en la Poma lloc de desenvolupadors de molt
de referències a totes les objectes i tots els processos
que en realitat fer això possible.
Però cal notar que això és essencialment una funció que el pas algunes dades.
I jo torni algun tipus de dades.
I he de fer servir això com a paraula clau per convertir-lo en aquest NSDictionary?
Què és més un NSDictionary opcional.
Que després necessito comprovar per veure si existeix.
>> Així que puc utilitzar que si es deixa iguals reeixides analitzades,
llavors sé que això opcional en realitat conté algunes dades.
O el que vaig fer aquí va ser a simplement assumir que si hi ha
hi va haver errors que de fet és segur.
Molt bé, vull donar les gràcies tot gràcies per haver vingut.
Sé que això era molt, però no va ser fins a una hora
parlar d'algunes coses bastant avançada.
I així que espero que obtindrà un possibilitat de descarregar tot el codi
i donar un millor, més profund cop d'ull a ell.
Una mena de convèncer-se a si mateix de tots de les coses que està passant.
I vull donar-li les gràcies tot, de nou, per venir.
I bona sort amb els seus projectes finals.
Que tinguis un gran dia.