1 00:00:00,000 --> 00:00:03,332 >> [Música tocando] 2 00:00:03,332 --> 00:00:06,200 3 00:00:06,200 --> 00:00:09,590 >> DAN AMRMENDARIZ: Todos, Benvido ao seminario CS50, 4 00:00:09,590 --> 00:00:11,690 IOS App Desenvolvemento con Swift. 5 00:00:11,690 --> 00:00:15,690 Eu son Dan Armendáriz, e eu son un preceptor de ciencia da computación aquí en Harvard. 6 00:00:15,690 --> 00:00:21,510 >> E a próxima hora será un rápido tour de tanta cousa 7 00:00:21,510 --> 00:00:25,160 sobre este tema como podemos encaixar. 8 00:00:25,160 --> 00:00:29,170 Vou publicar todo o código fonte que vai ver hoxe en liña. 9 00:00:29,170 --> 00:00:31,990 Podemos non ser capaces de de feito, pasar por riba de todo 10 00:00:31,990 --> 00:00:34,810 que eu son que eu son mostrando a vostede nesta hora. 11 00:00:34,810 --> 00:00:37,580 Pero, polo menos, espero que a través os comentarios do código fonte, 12 00:00:37,580 --> 00:00:40,830 vai ser capaz de tratar de descubrir o que exactamente está a suceder para isto 13 00:00:40,830 --> 00:00:42,950 que non moi chegar. 14 00:00:42,950 --> 00:00:46,970 >> En xeral, a estrutura de A charla de hoxe será a seguinte. 15 00:00:46,970 --> 00:00:52,820 Nós comezamos a facer algúns básico sintaxe coa linguaxe Swift, 16 00:00:52,820 --> 00:00:56,290 indo a algunhas das máis avanzado sintaxe da linguaxe Swift. 17 00:00:56,290 --> 00:00:59,560 Porque o idioma é realmente moderno e 18 00:00:59,560 --> 00:01:02,110 ten unha morea de alto nivel recursos, cousas que non teñen 19 00:01:02,110 --> 00:01:06,600 visto en C durante CS50, ou Mesmo algúns dos outros idiomas 20 00:01:06,600 --> 00:01:09,310 que comezan usando en CS50 como PHP, 21 00:01:09,310 --> 00:01:12,670 entón eu vou ter que tentar presentar tamén algúns temas que 22 00:01:12,670 --> 00:01:18,580 están relacionados con linguaxes de alto nivel que non pode ver en profundidade o CS50, 23 00:01:18,580 --> 00:01:21,380 pero vai ver máis tarde clases de informática. 24 00:01:21,380 --> 00:01:25,290 Por iso, vai ser un hermeticamente embalados hora. 25 00:01:25,290 --> 00:01:28,897 E Sinto-se a liberdade de me deixar saber se tes algunha dúbida. 26 00:01:28,897 --> 00:01:30,730 Entón, se vostede está interesado en facer desenvolvemento 27 00:01:30,730 --> 00:01:34,442 con Swift, ou realmente calquera desenvolvemento de aplicacións IOS, 28 00:01:34,442 --> 00:01:35,900 hai un par de requisitos. 29 00:01:35,900 --> 00:01:39,940 Primeiro de todo, ten que estar a usar un Mac, correndo nos exemplos 30 00:01:39,940 --> 00:01:43,880 que imos estar a usar hoxe, relativamente nova versión do VOS 31 00:01:43,880 --> 00:01:46,580 X. Neste caso, eu estou correndo X 10.5. 32 00:01:46,580 --> 00:01:48,600 Podes estar executando 10.11, se queres. 33 00:01:48,600 --> 00:01:52,430 Pero todo o que vai ver se inclúen Xcode 7 e posterior, 34 00:01:52,430 --> 00:01:56,271 que ten a última versión de Swift, que é Swift 2.0. 35 00:01:56,271 --> 00:01:58,270 Esta é realmente unha fermosa distinción importante. 36 00:01:58,270 --> 00:02:01,510 Unha morea de a sintaxe ten cambiou moito significativamente 37 00:02:01,510 --> 00:02:05,890 nalgúns casos desde 1,0 Swift, que foi lanzado o ano pasado, 38 00:02:05,890 --> 00:02:08,514 Swift para 2,0, o que só saíu neste outono. 39 00:02:08,514 --> 00:02:09,889 Entón, nós estamos indo a amosar Swift 2.0. 40 00:02:09,889 --> 00:02:13,020 Unha morea de cousas que buscar en liña 41 00:02:13,020 --> 00:02:18,040 cando está intentando obter adicional información sobre unha variedade de cousas, 42 00:02:18,040 --> 00:02:20,710 pode querer explicitamente buscar Swift 2 43 00:02:20,710 --> 00:02:24,950 en vez de simplemente vello Swift para facer Asegúrese de que comeza a sintaxe correcta. 44 00:02:24,950 --> 00:02:26,920 >> En realidade, este é xeralmente feito. 45 00:02:26,920 --> 00:02:31,210 Hai unha cantidade acelerado de desenvolvemento pasando en lingua Swift 46 00:02:31,210 --> 00:02:35,110 sempre que Apple lanzou iso, eu creo o que, foi un pouco máis de un ano 47 00:02:35,110 --> 00:02:36,370 agora. 48 00:02:36,370 --> 00:02:39,080 E as cousas cambiaron dramaticamente durante ese tempo. 49 00:02:39,080 --> 00:02:42,160 E por iso non se errado se, cando está mirando arredor 50 00:02:42,160 --> 00:02:48,310 para temas sobre Swift ou como realizar algo usando un código de exemplo 51 00:02:48,310 --> 00:02:51,210 ou algo que non fai realmente traballar Swift 2.0. 52 00:02:51,210 --> 00:02:53,790 Asegúrese de que está a buscar especialmente para esa versión 53 00:02:53,790 --> 00:02:58,690 para tratar de minimizar os efectos de diferentes versións e estes tipos de cousas. 54 00:02:58,690 --> 00:03:02,470 >> Vou tentar destacar só algunhas cousas que son diferentes para versións máis antigas. 55 00:03:02,470 --> 00:03:03,970 Pero é algo que atente para. 56 00:03:03,970 --> 00:03:06,770 Isto probablemente vai ser unha das maiores dores de cabeza 57 00:03:06,770 --> 00:03:11,010 que vai ter con Swift é atopar exemplo de código que é máis vello, mesmo só 58 00:03:11,010 --> 00:03:14,050 por algúns meses, intentando usar lo no seu proxecto máis moderno. 59 00:03:14,050 --> 00:03:15,430 E iso simplemente non funciona. 60 00:03:15,430 --> 00:03:18,530 Está a recibir erros do compilador, sintaxe erros, todo tipo de cousas tolas. 61 00:03:18,530 --> 00:03:21,580 Entón, só tes que ser paciente con que, e veña a 62 00:03:21,580 --> 00:03:24,200 ter unha experiencia moi agradable con total Swift. 63 00:03:24,200 --> 00:03:28,430 >> Agora podes realmente join-- e espero realmente aínda ten ese este ano-- 64 00:03:28,430 --> 00:03:30,910 Apple app do CS 50 equipo de desenvolvemento, que 65 00:03:30,910 --> 00:03:34,680 permitirá a instalación de calquera aplicación que crea nos seus dispositivos iOS. 66 00:03:34,680 --> 00:03:39,190 Entón bótalle un ollo neste URL se vostede está interesado en facelo. 67 00:03:39,190 --> 00:03:41,450 >> Entón, só tes que un par de cousas sobre si Swift. 68 00:03:41,450 --> 00:03:43,580 É unha linguaxe compilada. 69 00:03:43,580 --> 00:03:45,870 Pero vai ver que algúns os recursos que utilizamos 70 00:03:45,870 --> 00:03:50,650 permiten que sexa usado tamén en algo interpretado como un xeito tamén. 71 00:03:50,650 --> 00:03:56,350 >> Unha boa parte da sintaxe é prestada de C. Baséase e escrito en C. 72 00:03:56,350 --> 00:04:00,400 E por iso imos ver que hai un gran número de takeaways 73 00:04:00,400 --> 00:04:04,450 a partir do seu coñecemento existente de C que pode porta Swift. 74 00:04:04,450 --> 00:04:07,290 >> Pero hai cousas que facelo moi diferente de C. 75 00:04:07,290 --> 00:04:08,860 É moi fortemente tipado. 76 00:04:08,860 --> 00:04:10,380 Hai xestión automática de memoria. 77 00:04:10,380 --> 00:04:13,170 Non vai ter que usar malloc ou en calquera lugar de balde. 78 00:04:13,170 --> 00:04:15,110 Foi deseñado para a xeneralidade. 79 00:04:15,110 --> 00:04:19,480 Polo tanto, noutras palabras, pode usalo en todo tipo de contextos, de Apple Assist 80 00:04:19,480 --> 00:04:26,290 para iPhone todo o camiño ata VOS X, e mesmo algúns servidores, mesmo algúns scripts. 81 00:04:26,290 --> 00:04:28,400 Pero imos ver o que soporte para scripts 82 00:04:28,400 --> 00:04:31,360 non é completamente alí aínda como é noutros idiomas. 83 00:04:31,360 --> 00:04:34,930 Entón, probablemente está a usar este exclusivo para o desenvolvemento 84 00:04:34,930 --> 00:04:37,060 no seu Mac ou iPhone. 85 00:04:37,060 --> 00:04:40,150 >> E ten unha morea de características modernas. 86 00:04:40,150 --> 00:04:43,380 E moitas destas cousas son cousas que imos tratar de resolver hoxe, 87 00:04:43,380 --> 00:04:47,590 pero tamén os nosos temas que, a verdade, podemos dedicar cursos enteiros. 88 00:04:47,590 --> 00:04:50,140 De feito, CS 51, que é preto semestre ofrecido, 89 00:04:50,140 --> 00:04:53,990 céntrase moito sobre estes temas que son descritos a continuación. 90 00:04:53,990 --> 00:04:56,781 Así, pode pasar un semestre enteiro comprender estas cousas. 91 00:04:56,781 --> 00:04:58,530 Pero nós imos tratar para pasar por eles 92 00:04:58,530 --> 00:05:00,800 polo menos o suficiente para que pode entender o que é 93 00:05:00,800 --> 00:05:03,700 pasando cando mira a un programa Swift 94 00:05:03,700 --> 00:05:07,310 e ser capaz de cortar o seu camiño través del para o proxecto final. 95 00:05:07,310 --> 00:05:10,780 >> Agora, unha das mellores formas que pode obter información adicional sobre este 96 00:05:10,780 --> 00:05:14,700 é francamente só a través de Apple proporcionada documentación para Swift. 97 00:05:14,700 --> 00:05:16,930 Hai unha morea de APIs que están dispoñibles. 98 00:05:16,930 --> 00:05:21,170 E esta é unha boa base para ti a ollar para cousas específicas que 99 00:05:21,170 --> 00:05:23,020 queren facer unha API que inclúen IOS. 100 00:05:23,020 --> 00:05:26,350 Se quere usar a cámara para exemplo, pode comezar a ollar aquí, 101 00:05:26,350 --> 00:05:32,540 e tamén usar Google e Stack Overflow como faría normalmente. 102 00:05:32,540 --> 00:05:36,670 >> Calquera preguntas sobre esa antes de ir para a dereita? 103 00:05:36,670 --> 00:05:37,880 Todo ben. 104 00:05:37,880 --> 00:05:38,700 Imos seguir adiante. 105 00:05:38,700 --> 00:05:42,620 >> Entón, primeiro, eu teño un número de ficheiros de exemplo. 106 00:05:42,620 --> 00:05:46,040 E eu vou tentar a etapa a través deles de forma relativamente rápida. 107 00:05:46,040 --> 00:05:49,190 Este é o arquivo Ola Mundo para Swift. 108 00:05:49,190 --> 00:05:51,050 É moi sinxelo. 109 00:05:51,050 --> 00:05:54,360 Non hai xeito máis comentarios que existen código real. 110 00:05:54,360 --> 00:05:57,100 Teña en conta o código real está fondo na liña 14. 111 00:05:57,100 --> 00:05:57,980 Di impresión. 112 00:05:57,980 --> 00:05:59,820 E entón é unha chamada de función. 113 00:05:59,820 --> 00:06:03,010 Estamos pasando a cadea chamada Ola CS50. 114 00:06:03,010 --> 00:06:04,750 Teña en conta que non hai ningún punto e coma. 115 00:06:04,750 --> 00:06:07,010 Teña en conta que non hai ningunha int main. 116 00:06:07,010 --> 00:06:10,392 Hai ningún dos cruft que tivemos con C. 117 00:06:10,392 --> 00:06:15,020 Cando estamos usando Swift, deste xeito, que é só escrito nun ficheiro de texto 118 00:06:15,020 --> 00:06:18,340 e almacenados no meu computador, a continuación, I pode recompila-lo e executalo. 119 00:06:18,340 --> 00:06:20,920 >> Lembre que aquí son non usar o IDE CS50. 120 00:06:20,920 --> 00:06:24,460 Isto supón que eu son execución e que eu estou no VOS X, 121 00:06:24,460 --> 00:06:27,870 e que eu Xcode xa instalado nesta máquina para que este 122 00:06:27,870 --> 00:06:29,080 para realmente función. 123 00:06:29,080 --> 00:06:33,349 Pero este é só un ficheiro de texto normal que pode entón compilar e editar. 124 00:06:33,349 --> 00:06:34,890 Entón, imos ver como isto realmente funciona. 125 00:06:34,890 --> 00:06:37,430 E se eu queira recompila-lo? 126 00:06:37,430 --> 00:06:40,450 1.swift swiftc. 127 00:06:40,450 --> 00:06:42,960 Despois dun momento ou dous, Vai ver que temos agora 128 00:06:42,960 --> 00:06:45,360 compilado iso nun arquivo chamado 1. 129 00:06:45,360 --> 00:06:51,090 E agora nós imprimir noso CS50, nosa aplicación Ola Mundo en vez. 130 00:06:51,090 --> 00:06:54,690 >> Observe outra cousa como ben é que, por defecto, 131 00:06:54,690 --> 00:07:00,090 nós non temos a entrada A / N para imprimir unha nova liña. 132 00:07:00,090 --> 00:07:05,315 Por defecto, a función de impresión en Swift imprimirá unha nova liña para ti. 133 00:07:05,315 --> 00:07:09,284 Pode pasar un adicional opcional parámetro para dicir que non facelo. 134 00:07:09,284 --> 00:07:10,950 Pero Google para obter máis información sobre o tema. 135 00:07:10,950 --> 00:07:13,450 Por defecto, que vai facer a liña de impresión. 136 00:07:13,450 --> 00:07:16,420 >> Todo ben, entón imos seguir adiante a continuación, para algunhas outras cousas. 137 00:07:16,420 --> 00:07:18,620 Entón, como podemos realmente definir variables? 138 00:07:18,620 --> 00:07:21,960 Podemos facelo é utilizando un dos dous métodos. 139 00:07:21,960 --> 00:07:26,122 E o que quero dicir a vostede sobre a primeira é esta definición let. 140 00:07:26,122 --> 00:07:27,830 E iso é importante porque efectivamente 141 00:07:27,830 --> 00:07:30,240 o que estamos facendo é definir unha constante. 142 00:07:30,240 --> 00:07:34,010 Nós imos crear unha variable, ou mellor, un chamado nome de constante, 143 00:07:34,010 --> 00:07:38,200 proporcionar-lle algunhas data-- en Neste caso, a secuencia de Dan. 144 00:07:38,200 --> 00:07:40,630 Pero usando este let contrasinal, estamos dicindo 145 00:07:40,630 --> 00:07:43,860 que esta é variable-- constant-- chamado de novo 146 00:07:43,860 --> 00:07:46,220 nome non vai ser modificado. 147 00:07:46,220 --> 00:07:50,120 Será inmutable ao longo a duración deste programa 148 00:07:50,120 --> 00:07:53,100 ou en todo o duración do contexto 149 00:07:53,100 --> 00:07:55,390 que esta variable é dispoñible. 150 00:07:55,390 --> 00:08:00,096 >> Isto é realmente importante que, cando tes algúns datos que non é 151 00:08:00,096 --> 00:08:02,970 cambiará no seu programa, e podes ver unha variedade de exemplos 152 00:08:02,970 --> 00:08:06,790 de como queremos usar deixe versus a outra sintaxe, 153 00:08:06,790 --> 00:08:11,040 é importante que use deixar sempre que sexa posible, xa que esta notifica 154 00:08:11,040 --> 00:08:13,740 Idioma que é non vai ser modificado, 155 00:08:13,740 --> 00:08:16,590 e pode realmente facer unha morea de optimizacións 156 00:08:16,590 --> 00:08:19,560 para mellorar a velocidade e a seguridade do seu programa. 157 00:08:19,560 --> 00:08:24,480 E por seguridade, non significa deixá- falla con erros de tolos 158 00:08:24,480 --> 00:08:27,910 para que sexamos afeitos ver en C. 159 00:08:27,910 --> 00:08:32,460 >> Entón, podemos utilizar interpolación de cadea para encapsular que dentro dunha cadea. 160 00:08:32,460 --> 00:08:35,200 Así, podemos ver neste liña de impresión, imprimir Ola, 161 00:08:35,200 --> 00:08:38,950 e logo usando barra invertida parénteses abertas, e, a continuación, o nome do meu variable, 162 00:08:38,950 --> 00:08:41,809 neste caso constante, pechar os parénteses. 163 00:08:41,809 --> 00:08:46,400 Estou esencialmente, a continuación, poñer o contido deste nome variable chamada 164 00:08:46,400 --> 00:08:50,240 dentro da corda e, a continuación, imprimir o resultado alí. 165 00:08:50,240 --> 00:08:54,070 >> Hai outra modificación a este ficheiro que é o que eu teño, na parte superior, 166 00:08:54,070 --> 00:08:57,340 poñer nunha liña shebang, que basicamente só especifica 167 00:08:57,340 --> 00:09:00,180 que quero usar o Intérprete Swift, que 168 00:09:00,180 --> 00:09:04,190 significa que eu non teño máis para compilar este programa particular. 169 00:09:04,190 --> 00:09:06,567 Podo só executa-lo como o seu propio guión. 170 00:09:06,567 --> 00:09:09,400 Pero esta é, neste caso, por tras as escenas sendo compilados e, a continuación, 171 00:09:09,400 --> 00:09:10,030 en execución. 172 00:09:10,030 --> 00:09:13,540 É só invisible para nós. 173 00:09:13,540 --> 00:09:15,880 >> Todo ben, entón imos seguir adiante. 174 00:09:15,880 --> 00:09:19,650 Polo tanto, hai un pouco de malandragem que só aconteceu antes. 175 00:09:19,650 --> 00:09:23,230 Mostre-lle que eu É posible axustar unha constante. 176 00:09:23,230 --> 00:09:25,490 E eu podería proporcionar algúns datos para facelo. 177 00:09:25,490 --> 00:09:29,240 Pero, neste caso, repare en que eu non fixen de feito, especifican o tipo de datos 178 00:09:29,240 --> 00:09:29,820 que é. 179 00:09:29,820 --> 00:09:32,780 E iso é porque o compilador, pode Swift 180 00:09:32,780 --> 00:09:36,910 inferir o tipo de datos só en base sobre os datos que eu poñer nel. 181 00:09:36,910 --> 00:09:41,760 Porque sabe que por avaliar este variable aquí, ese dereito de datos 182 00:09:41,760 --> 00:09:43,370 aquí, el sabe que é unha cadea. 183 00:09:43,370 --> 00:09:48,690 E así este nome constante é, polo tanto, vai ser unha cadea así. 184 00:09:48,690 --> 00:09:52,730 >> Pero tamén pode ser explícita sobre o tipo que é 185 00:09:52,730 --> 00:09:55,790 imos usar para constantes ou variables 186 00:09:55,790 --> 00:10:01,590 usando esta sintaxe instead-- deixe de Cordas nome colon igual 187 00:10:01,590 --> 00:10:05,530 Dan, que neste caso significa que estamos vai definir un nome chamado constante. 188 00:10:05,530 --> 00:10:07,150 Será do tipo cadea. 189 00:10:07,150 --> 00:10:10,550 E o valor será Dan. 190 00:10:10,550 --> 00:10:12,550 Agora outra forma que podemos crear variables-- 191 00:10:12,550 --> 00:10:15,549 e estes son variables mutables, que significa que estamos, de feito, vai 192 00:10:15,549 --> 00:10:19,670 para cambiar o seu contido nalgún momento da duración do contexto 193 00:10:19,670 --> 00:10:23,890 que esa variable é defined-- nós usar a palabra chave var, no canto de deixar. 194 00:10:23,890 --> 00:10:27,400 Pero, de novo, por defecto, se non sabe que precisa para manipular eses datos, 195 00:10:27,400 --> 00:10:30,510 proba a usar para deixar melloras de rendemento. 196 00:10:30,510 --> 00:10:33,740 >> Neste caso, podo, entón, especificar o tipo de datos 197 00:10:33,740 --> 00:10:37,650 que esperamos estar dentro esta nova variable chamada etiqueta. 198 00:10:37,650 --> 00:10:38,800 Vai ser unha cadea. 199 00:10:38,800 --> 00:10:43,030 E nós estamos indo, a continuación, concatenar dúas cordas en conxunto, a cadea Ola, 200 00:10:43,030 --> 00:10:48,070 ea cadea representada pola variable, ou mellor, o nome constante. 201 00:10:48,070 --> 00:10:50,660 >> Entón, iso é bo porque esta está un tanto como PHP en que 202 00:10:50,660 --> 00:10:52,250 ten moi fácil concatenación. 203 00:10:52,250 --> 00:10:56,350 Non temos para automaticamente utilizar calquera tipo de xestión de memoria 204 00:10:56,350 --> 00:11:00,580 para aumentar o tamaño e facer calquera tipo de cousas divertido alí. 205 00:11:00,580 --> 00:11:05,040 Isto funciona como sería de esperar, en realidade. 206 00:11:05,040 --> 00:11:09,370 >> Todo ben, calquera dúbida sobre este? 207 00:11:09,370 --> 00:11:12,520 >> Agora, a outra razón que necesitamos ter a capacidade 208 00:11:12,520 --> 00:11:15,490 para poder establecer o que tipo de variables de datos son 209 00:11:15,490 --> 00:11:18,170 é porque ás veces non o facemos quere arrincar variables 210 00:11:18,170 --> 00:11:21,080 con algúns datos no punto de definición. 211 00:11:21,080 --> 00:11:23,500 Polo tanto, neste caso, por exemplo que quero comezar a introducir 212 00:11:23,500 --> 00:11:25,040 algunhas notas nun libro de notas. 213 00:11:25,040 --> 00:11:27,530 Ben, eu sei que un dos variables que quero ser 214 00:11:27,530 --> 00:11:30,280 vai ser unha clase mutável. 215 00:11:30,280 --> 00:11:33,010 E tamén sabemos que quero que sexa un enteiro. 216 00:11:33,010 --> 00:11:36,030 Pero quizais nós non facemos aínda ten ese grao dispoñible. 217 00:11:36,030 --> 00:11:39,570 >> En Swift, ten que definir o tipo de datos 218 00:11:39,570 --> 00:11:44,000 que está asociada cun variable ou unha constante deixar 219 00:11:44,000 --> 00:11:47,840 antes de que poida realmente usar esa variable. 220 00:11:47,840 --> 00:11:51,170 Porque é fortemente tipado, ten que asociar un tipo de 221 00:11:51,170 --> 00:11:52,890 con estas variables. 222 00:11:52,890 --> 00:11:56,120 >> Polo tanto, neste caso, se eu non teño propiamente iniciar o primeiro con algún valor, 223 00:11:56,120 --> 00:12:00,520 entón eu teño que dicir que Swift Espero que o tipo de datos a ser. 224 00:12:00,520 --> 00:12:02,650 E vai permanecer que mesmo tipo de datos 225 00:12:02,650 --> 00:12:05,780 ao longo da historia deste programa. 226 00:12:05,780 --> 00:12:10,050 >> Agora podes ser tentado polo que Eu creei esta variable grao 227 00:12:10,050 --> 00:12:13,530 e sempre que un número enteiro de 100, agora si 228 00:12:13,530 --> 00:12:18,540 quero tentar concatenar unha cadea con este completo, 229 00:12:18,540 --> 00:12:21,610 pode ser tentado a usar aínda ese operador de concatenación de cadeas 230 00:12:21,610 --> 00:12:24,500 como fixemos só algunhas liñas antes. 231 00:12:24,500 --> 00:12:26,460 Pero, desgraciadamente, que realmente non vai 232 00:12:26,460 --> 00:12:29,270 traballar, porque é esencialmente executando 233 00:12:29,270 --> 00:12:32,380 unha operación en dous tipos diferentes. 234 00:12:32,380 --> 00:12:36,856 >> Agora iso é moi diferente doutros linguaxes como PHP que son realmente 235 00:12:36,856 --> 00:12:38,480 goosey loosey co seu tipo de tipos. 236 00:12:38,480 --> 00:12:40,030 Están só lle gusta, si, calquera que sexa, eu non me importa. 237 00:12:40,030 --> 00:12:42,710 Só me dea un tipo, e quizais eu vou facer as cousas ben. 238 00:12:42,710 --> 00:12:46,060 >> Neste caso, é Swift moi rigoroso sobre os tipos 239 00:12:46,060 --> 00:12:47,350 que está lidando. 240 00:12:47,350 --> 00:12:50,700 Este operador sumatorio ou operador de concatenación 241 00:12:50,700 --> 00:12:54,400 ten esencialmente un par de diferentes opcións posibles. 242 00:12:54,400 --> 00:12:56,970 Podes facer sumatorio con números enteiros, ou 243 00:12:56,970 --> 00:13:00,870 pode facer concatenación de cadeas, e quizais algunhas outras cousas tamén. 244 00:13:00,870 --> 00:13:05,550 Pero se ese titular non recoñece o que é en ambos os dous lados do mesmo, 245 00:13:05,550 --> 00:13:10,452 ou mellor, a combinación dos dous tipos, non é o que está esperando, 246 00:13:10,452 --> 00:13:11,910 a continuación, que vai causar un fallo. 247 00:13:11,910 --> 00:13:16,690 >> Polo tanto, neste caso, o que significa para ter unha corda máis un número enteiro? 248 00:13:16,690 --> 00:13:18,880 Ben no contexto tanto, nós probablemente quere 249 00:13:18,880 --> 00:13:21,990 a facer unha operación de concatenación de cadeas. 250 00:13:21,990 --> 00:13:26,420 Pero está claro que o ordenador non ten este tipo de contexto. 251 00:13:26,420 --> 00:13:29,950 E por iso necesitamos proporcionar que a información adicional 252 00:13:29,950 --> 00:13:32,390 para deixar saber o que é que queremos facer. 253 00:13:32,390 --> 00:13:36,860 >> Así, noutras palabras, o feito que Swift é fortemente tipado 254 00:13:36,860 --> 00:13:39,520 significa que ten que facer un pouco de traballo adicional 255 00:13:39,520 --> 00:13:42,100 para obtelo para controlar o forma que desexa. 256 00:13:42,100 --> 00:13:43,710 Porén, como resultado, é máis seguro. 257 00:13:43,710 --> 00:13:46,290 E unha vez que ten tomar en conta os tipos, 258 00:13:46,290 --> 00:13:49,300 cousas só francamente comezar funcionar moi ben. 259 00:13:49,300 --> 00:13:52,520 >> Polo tanto, neste caso, nós, a continuación, vai executar concatenación de cadeas 260 00:13:52,520 --> 00:13:56,040 por filtración explicitamente o enteiro para unha cadea 261 00:13:56,040 --> 00:13:58,490 por envolve-lo neste capital de función S cadea, 262 00:13:58,490 --> 00:14:03,510 e logo a través da concatenación operador para modificar a nosa variable etiqueta, 263 00:14:03,510 --> 00:14:06,280 e, a continuación, imprimir lo. 264 00:14:06,280 --> 00:14:08,420 >> Tan lonxe, tan bo? 265 00:14:08,420 --> 00:14:12,020 Todo ben, imos seguir adiante. 266 00:14:12,020 --> 00:14:16,300 >> Agora, hai unha variedade de datos tipo que podemos utilizar en Swift. 267 00:14:16,300 --> 00:14:21,620 Como se acostumaron a, podemos crear unha matriz mutável. 268 00:14:21,620 --> 00:14:26,140 E esa matriz só pode conter un único tipo. 269 00:14:26,140 --> 00:14:30,360 >> Polo tanto, neste caso, nós estamos indo a crear un mutables matrices de enteiros, o que 270 00:14:30,360 --> 00:14:34,800 imos chamar graos, e seremos capaces para almacenar que neste paréntese 271 00:14:34,800 --> 00:14:38,650 formato que creceu acostumado a en unha variedade de outras linguaxes. 272 00:14:38,650 --> 00:14:41,150 Pero teña en conta que aquí estamos definindo un par de cousas. 273 00:14:41,150 --> 00:14:45,350 clases é un variable-- mutável non utilizar a palabra chave let. 274 00:14:45,350 --> 00:14:49,620 Entón iso significa que podemos modificar para o contido desta matriz. 275 00:14:49,620 --> 00:14:53,420 É do tipo Array Int, e podemos dicir que 276 00:14:53,420 --> 00:14:56,260 con base neses corchetes aquí. 277 00:14:56,260 --> 00:14:58,930 >> Agora, unha das cousas agradables sobre iso é que nós 278 00:14:58,930 --> 00:15:02,310 teñen acceso a unha gran cantidade de Información adicional 279 00:15:02,310 --> 00:15:07,110 sobre a matriz usando só algúns notación de punto simple. 280 00:15:07,110 --> 00:15:10,500 Así, por exemplo, grades.count ofrece para nós 281 00:15:10,500 --> 00:15:14,820 o número de elementos que hai nese array, que pode, entón, acceder fermosa 282 00:15:14,820 --> 00:15:19,090 facilmente usando simplemente que a notación de punto. 283 00:15:19,090 --> 00:15:21,830 >> Se queres engadir adicional elementos para esta matriz, 284 00:15:21,830 --> 00:15:27,220 non pode facer o estilo PHP onde acaba de establecer explicitamente, 285 00:15:27,220 --> 00:15:30,910 a un dato índice, un valor que quere inserir. 286 00:15:30,910 --> 00:15:37,210 Pola contra, usa o acréscimo método no tipo de matriz 287 00:15:37,210 --> 00:15:40,920 para engadir este elemento, 95, a esta lista. 288 00:15:40,920 --> 00:15:45,990 >> Entón agora esa matriz ten a seguinte contents-- 100, 0, 90, 85. 289 00:15:45,990 --> 00:15:49,270 E agora temos engadido 95 para que, como ben. 290 00:15:49,270 --> 00:15:51,830 >> Hai outras formas Podemos engadir cousas. 291 00:15:51,830 --> 00:15:55,030 Pode realmente usar un operador de suma, 292 00:15:55,030 --> 00:15:59,200 que será interpretada como unha operación de matriz de datos anexados. 293 00:15:59,200 --> 00:16:04,680 E pode logo engadir outro array, cuxo contido é de 70 e 80, 294 00:16:04,680 --> 00:16:05,560 para esa matriz. 295 00:16:05,560 --> 00:16:08,250 Polo tanto, agora temos o contido deste variable 296 00:16:08,250 --> 00:16:17,220 grades-- 100, 0, 90, 85, 95, 70, e 80. 297 00:16:17,220 --> 00:16:21,850 Este é só un pouco agradable sintáctica azucre que Swift ofrece para nós. 298 00:16:21,850 --> 00:16:23,850 >> Polo tanto, se queremos sumar o graos, estamos quizais 299 00:16:23,850 --> 00:16:27,340 Vai querer facer unha iteración sobre cada elemento neste loop. 300 00:16:27,340 --> 00:16:32,150 E nós temos, con Swift, a noción dun loop for como sería de esperar. 301 00:16:32,150 --> 00:16:35,350 Pero o camiño que nos indicamos un intervalo é un pouco diferente. 302 00:16:35,350 --> 00:16:37,790 Polo tanto, neste caso, a Resumindo todo, imos 303 00:16:37,790 --> 00:16:40,650 vai crear un temporal chamado suma variable para que 304 00:16:40,650 --> 00:16:42,580 para manter esta conta. 305 00:16:42,580 --> 00:16:44,430 >> E teña en conta o noso para construción de loop aquí. 306 00:16:44,430 --> 00:16:46,820 Para o índice en 0 .. 00:16:51,480 308 00:16:51,480 --> 00:16:57,390 Polo tanto, esta construción, 0 .. 00:17:01,860 dicindo que imos crear unha gama de números enteiros de 0 ata 310 00:17:01,860 --> 00:17:05,750 ata, pero excluíndo grades.count. 311 00:17:05,750 --> 00:17:09,577 Polo tanto, este será de 0, 1, 2, 3, 4, 5, ata porén moitos un 312 00:17:09,577 --> 00:17:10,410 antes grades.count. 313 00:17:10,410 --> 00:17:14,160 >> Polo tanto, esta é diferente de como nós normalmente usado para loops 314 00:17:14,160 --> 00:17:18,569 onde tería algún índice variable, axuste-igual a 0 no primeiro, 315 00:17:18,569 --> 00:17:25,480 e entón integralas que ata algúns valor menor que a conta de elementos 316 00:17:25,480 --> 00:17:27,140 nese array. 317 00:17:27,140 --> 00:17:29,820 >> Polo tanto, hai unha modificación para isto, en realidade, 318 00:17:29,820 --> 00:17:35,010 o que nos permite moi facilmente definir distintos tipos de intervalos. 319 00:17:35,010 --> 00:17:40,570 Se altera este intervalo para tres puntos, 0 ... grade.count, 320 00:17:40,570 --> 00:17:45,120 esta representa a gama 0 para grades.count inclusiva, 321 00:17:45,120 --> 00:17:49,260 o que significa que este número é tamén entón incluídos nese intervalo. 322 00:17:49,260 --> 00:17:52,110 >> Pero iso é moi útil para estas cousas exactas, 323 00:17:52,110 --> 00:17:54,590 cando temos que executar iteracións máis de lazo 324 00:17:54,590 --> 00:17:59,630 porque eses índices son indexados cero, como vimos noutros idiomas 325 00:17:59,630 --> 00:18:02,360 ben. 326 00:18:02,360 --> 00:18:05,210 Calquera preguntas sobre esa cara loop? 327 00:18:05,210 --> 00:18:10,660 >> Polo tanto, non hai definición implícita desta variable índice, 328 00:18:10,660 --> 00:18:14,350 cuxo valor comeza en 0 e segue a cada iteración do bucle 329 00:18:14,350 --> 00:18:17,950 a un aumento de 1 ata un punto que é igual a grades.count, 330 00:18:17,950 --> 00:18:20,380 punto no cal, o loop aborta. 331 00:18:20,380 --> 00:18:23,730 >> Teña en conta que, na nosa cadea interpolación aquí, 332 00:18:23,730 --> 00:18:26,910 podemos realmente realizar algunhas simple manipulacións a eses valores. 333 00:18:26,910 --> 00:18:31,230 Así índice máis 1 vai realmente realizar unha suma dese valor 334 00:18:31,230 --> 00:18:34,780 porque o índice é, en Neste caso, un número enteiro. 335 00:18:34,780 --> 00:18:37,810 E nese punto, que vai a continuación, ser convertido nunha cadea 336 00:18:37,810 --> 00:18:42,230 e interpolados para esa secuencia aquí, e impreso como sería de esperar. . 337 00:18:42,230 --> 00:18:44,520 >> E a cousa agradable sobre as matrices aquí é 338 00:18:44,520 --> 00:18:50,730 que tamén somos capaces de ter valores obter valores de axuste 339 00:18:50,730 --> 00:18:54,080 usando a notación paréntese como vimos noutros idiomas tamén. 340 00:18:54,080 --> 00:18:57,130 341 00:18:57,130 --> 00:19:01,030 >> Todo ben, entón a partir de aquí, podemos agora calcular a suma de todos os tipos. 342 00:19:01,030 --> 00:19:02,780 Agora tipo do seguinte paso lóxico sería 343 00:19:02,780 --> 00:19:07,580 para facer unha operación de división para atopar a media destas notas. 344 00:19:07,580 --> 00:19:10,150 Pero algo importante aquí que está a acontecer 345 00:19:10,150 --> 00:19:15,020 é que este importe é, quizais, un número enteiro. 346 00:19:15,020 --> 00:19:18,020 Pero precisamos realizar algunha especie de división de parella. 347 00:19:18,020 --> 00:19:20,600 E iso vai ser moi importante cando 348 00:19:20,600 --> 00:19:24,140 queremos realizar esta operación, porque o que estamos dicindo 349 00:19:24,140 --> 00:19:28,430 é que necesitamos, en realidade, realizar a división en dúas dobres. 350 00:19:28,430 --> 00:19:31,370 E, de novo, porque Swift está fortemente ingresaran, 351 00:19:31,370 --> 00:19:36,760 debemos definir explicitamente toda a elementos para dúos antes que efectivamente 352 00:19:36,760 --> 00:19:38,300 realizar a operación. 353 00:19:38,300 --> 00:19:40,550 >> Entón, para nós realizar a división de matrimonio, 354 00:19:40,550 --> 00:19:43,730 non é suficiente para só un destes elementos a ser unha parella. 355 00:19:43,730 --> 00:19:46,400 Ambas partes teñen que ser un dobre, para swift 356 00:19:46,400 --> 00:19:50,860 para estar seguro de que este é o que queremos facer. 357 00:19:50,860 --> 00:19:54,360 Entón, imos, entón, explicitamente typecast a suma que temos calculado anteriormente 358 00:19:54,360 --> 00:19:58,970 ea conta de notas para dúos, e a continuación, realizar esta operación e almacenamento 359 00:19:58,970 --> 00:20:02,390 que para esta nova variable, ou mellor, esta nova constante chamada media, 360 00:20:02,390 --> 00:20:06,810 que terá que tipo, imaxina? 361 00:20:06,810 --> 00:20:07,587 Dobre, si. 362 00:20:07,587 --> 00:20:09,420 Polo tanto, neste caso, nós Non ten que especificalo lo 363 00:20:09,420 --> 00:20:13,450 porque pode ser detectada a partir da operación que tipo de datos media 364 00:20:13,450 --> 00:20:14,730 será. 365 00:20:14,730 --> 00:20:19,025 E Swift é xeralmente moi bo sobre ser capaz de inferir tipo. 366 00:20:19,025 --> 00:20:22,116 367 00:20:22,116 --> 00:20:24,200 >> Quere ver este executar, ou podo seguir adiante? 368 00:20:24,200 --> 00:20:25,640 Quero continuar. 369 00:20:25,640 --> 00:20:28,130 Calquera preguntas sobre nada diso? 370 00:20:28,130 --> 00:20:28,630 Gran. 371 00:20:28,630 --> 00:20:31,160 372 00:20:31,160 --> 00:20:35,010 >> Agora imos comezar a chegar a as boas funcións definidoras stuff--, 373 00:20:35,010 --> 00:20:39,090 e un par de outros tipos que son Swift exclusivo para que non tes 374 00:20:39,090 --> 00:20:41,620 visto noutros idiomas ata este punto, 375 00:20:41,620 --> 00:20:46,290 pero que están presentes en calquera linguas que se pode atopar máis tarde. 376 00:20:46,290 --> 00:20:48,210 Entón, primeiro, se quere para definir unha función, 377 00:20:48,210 --> 00:20:52,170 vostede define-lo coa palabra funk función e, a continuación, o nome da función, 378 00:20:52,170 --> 00:20:56,710 e, a continuación, entre parénteses, os argumentos que quere que a función de aceptar. 379 00:20:56,710 --> 00:21:00,280 Os argumentos deben tamén specify-- generally-- 380 00:21:00,280 --> 00:21:05,010 Tamén debe especificar o tipo de datos que son, salvo que poidan ser inferida. 381 00:21:05,010 --> 00:21:07,500 E veremos que pouco excepción en só un pouco. 382 00:21:07,500 --> 00:21:09,920 >> Polo tanto, neste caso, temos un función chamada printGradeCount. 383 00:21:09,920 --> 00:21:12,840 Estamos indo para aceptar unha variable-- ou mellor, neste caso, 384 00:21:12,840 --> 00:21:14,450 un constant-- chamado gradebook. 385 00:21:14,450 --> 00:21:18,517 E iso vai ser de escriba array de enteiros. 386 00:21:18,517 --> 00:21:20,600 Agora hai algo que é realmente importante aquí 387 00:21:20,600 --> 00:21:21,849 que quero que entenda. 388 00:21:21,849 --> 00:21:27,560 Iso é que, por defecto, estes argumentos que son entradas para esta función son 389 00:21:27,560 --> 00:21:34,380 definido cunha contrasinal let implícita, o que significa que eu non podo modificar este 390 00:21:34,380 --> 00:21:39,850 variable gradebook aquí. 391 00:21:39,850 --> 00:21:43,360 E que tipo de ten sentido, porque está pasando datos in. 392 00:21:43,360 --> 00:21:45,860 E quizais non queres que a cambiarse desde debaixo de ti. 393 00:21:45,860 --> 00:21:50,800 Pode mencionar explicitamente que esta é unha variable, poñendo 394 00:21:50,800 --> 00:21:52,070 a palabra clave aquí var. 395 00:21:52,070 --> 00:21:56,832 Pero iso é unha pegadinha que temos As persoas notaron facer no pasado 396 00:21:56,832 --> 00:21:59,790 é que asumiron que vai para ser unha variable cando, en realidade, 397 00:21:59,790 --> 00:22:02,640 é unha constante. 398 00:22:02,640 --> 00:22:07,340 >> Todo ben, entón aquí, entón, neste caso, Non estamos especificando calquera tipo de retorno. 399 00:22:07,340 --> 00:22:09,460 Imos amosar-lle como fazê- que en só un momento. 400 00:22:09,460 --> 00:22:12,340 Pero teña en conta que temos aquí só un simple caso condición. 401 00:22:12,340 --> 00:22:14,560 O libro de notas é baleira, que neste caso 402 00:22:14,560 --> 00:22:19,310 é só a propiedade desta enteiro array, entón nós imprimir algo. 403 00:22:19,310 --> 00:22:23,100 Se non, facer outra cousa. 404 00:22:23,100 --> 00:22:25,000 >> Moi sinxelo, ata agora eu creo. 405 00:22:25,000 --> 00:22:27,960 Pero me deixar se ten algunha preguntas. 406 00:22:27,960 --> 00:22:33,350 >> Agora esta función, medio, tamén leva algúns argumentos, ou mellor, un argumento, 407 00:22:33,350 --> 00:22:37,507 que é o libro de notas, e esta vez vai voltar un tipo de matrimonio. 408 00:22:37,507 --> 00:22:39,340 Porque está computando a media e é 409 00:22:39,340 --> 00:22:45,010 vai volver, de feito, que media calculada para a liña de chamada. 410 00:22:45,010 --> 00:22:50,070 >> Neste caso, especificamos o tipo de retorno tras unha frecha. 411 00:22:50,070 --> 00:22:53,260 E iso pode sentirse unha especie de estraño ao principio. 412 00:22:53,260 --> 00:22:55,610 Creceu acostumado para definir o retorno 413 00:22:55,610 --> 00:22:57,720 escriba antes do nome da función. 414 00:22:57,720 --> 00:23:00,310 Pero se pensas deste en termos de matemáticas, 415 00:23:00,310 --> 00:23:03,320 como cando ten as matemáticas que definen unha función, 416 00:23:03,320 --> 00:23:06,807 ten unha función con algúns insumos, e produce unha saída. 417 00:23:06,807 --> 00:23:08,890 E iso é o que isto se quere imitar. 418 00:23:08,890 --> 00:23:12,460 E hai un par de outras linguas que ten unha sintaxe semellante, así como, 419 00:23:12,460 --> 00:23:15,674 pero probablemente ninguén que xa viu en CS50. 420 00:23:15,674 --> 00:23:17,090 Pero aínda non ser confundido por el. 421 00:23:17,090 --> 00:23:21,650 A frecha significa que está a suceder sendo devolto neste caso. 422 00:23:21,650 --> 00:23:23,650 OK, entón como é que imos para calcular esa media? 423 00:23:23,650 --> 00:23:25,649 Ben, se o libro de notas está baleiro, ben, entón estamos 424 00:23:25,649 --> 00:23:30,731 vai voltar 0, o que quizais unha forma razoable de trata-lo. 425 00:23:30,731 --> 00:23:32,980 Non sei, imos chegar ao que, en un pouco. 426 00:23:32,980 --> 00:23:34,688 Isto non pode, de feito, ser un xeito razoable 427 00:23:34,688 --> 00:23:38,310 para calcular unha media se temos un libro de notas baleiro. 428 00:23:38,310 --> 00:23:41,260 >> Entón imos realizar o noso sumatorio. 429 00:23:41,260 --> 00:23:43,900 Lembre que aquí estamos, en realidade, ten unha versión alternativa dun 430 00:23:43,900 --> 00:23:49,190 loop for, o que nos permite facer unha iteración sobre cada elemento nunha matriz 431 00:23:49,190 --> 00:23:53,630 e que cada elemento na súa propia variable. 432 00:23:53,630 --> 00:23:56,200 Ao especificar para o grao en gradebook, o que estamos dicindo 433 00:23:56,200 --> 00:24:00,560 é que nos imos implicitamente crear un novo constante chamada 434 00:24:00,560 --> 00:24:05,180 grao que vai representar cada elemento único no gradebook 435 00:24:05,180 --> 00:24:06,769 cada vez que o lazo for. 436 00:24:06,769 --> 00:24:08,560 Así, a primeira vez que é executado, o grao será 437 00:24:08,560 --> 00:24:09,800 ser o primeiro elemento no Boletín. 438 00:24:09,800 --> 00:24:12,300 A segunda vez que vai ser a segundo elemento, etc. etc. 439 00:24:12,300 --> 00:24:15,970 ata gradebook ten se exauriu de elementos. 440 00:24:15,970 --> 00:24:20,390 Entón, imos ser capaces de resumir que grao na nosa variable sumatorio 441 00:24:20,390 --> 00:24:22,570 e volver a nosa media como vimos antes. 442 00:24:22,570 --> 00:24:25,670 443 00:24:25,670 --> 00:24:26,950 OK, as preguntas? 444 00:24:26,950 --> 00:24:27,699 Si? 445 00:24:27,699 --> 00:24:28,990 Audiencia: Teño dúas preguntas. 446 00:24:28,990 --> 00:24:33,586 Número un, hipoteticamente, pode corre enteiro nun presente? 447 00:24:33,586 --> 00:24:35,604 Non ten que ser un parella, que é correcto? 448 00:24:35,604 --> 00:24:37,520 DAN AMRMENDARIZ: Pode repetir esta pregunta? 449 00:24:37,520 --> 00:24:39,587 Audiencia: Podo facer enteiro como a media? 450 00:24:39,587 --> 00:24:41,670 DAN AMRMENDARIZ: Pode facer enteiro como unha media? 451 00:24:41,670 --> 00:24:45,015 Entón voltar un enteiro media en vez dunha parella? 452 00:24:45,015 --> 00:24:48,204 >> Audiencia: Return-- vostede teñen ese dereito agora continuación. 453 00:24:48,204 --> 00:24:49,870 DAN AMRMENDARIZ: Ben aquí, volver 0.0? 454 00:24:49,870 --> 00:24:51,790 Audiencia: É, simplemente voltar 0. 455 00:24:51,790 --> 00:24:56,590 Polo tanto, tanto 80 ou 85, pero non 85,2. 456 00:24:56,590 --> 00:24:59,465 >> DAN AMRMENDARIZ: Entón, nese caso, polo que hai un par de formas diferentes 457 00:24:59,465 --> 00:25:00,090 para responder a iso. 458 00:25:00,090 --> 00:25:02,760 Déixeme responder a eles en orde. 459 00:25:02,760 --> 00:25:06,740 Entón, se eu só facer este retorno 0, un 0 é un valor enteiro. 460 00:25:06,740 --> 00:25:09,730 E así que pode causar un Tipo de erro para este caso 461 00:25:09,730 --> 00:25:13,210 porque está esperando unha parella pero é, entón, retornando un enteiro. 462 00:25:13,210 --> 00:25:16,770 Se eu queira voltar un enteiro, podo. 463 00:25:16,770 --> 00:25:20,450 Podo configurar o tipo de retorno para int, regresar 0 aquí, 464 00:25:20,450 --> 00:25:22,047 e non realizar a división de parella. 465 00:25:22,047 --> 00:25:23,880 Pero entón estariamos facendo a división enteira. 466 00:25:23,880 --> 00:25:27,080 E por iso, entón non vai recibir o media que posiblemente sería esperar. 467 00:25:27,080 --> 00:25:29,210 Pero si, podemos modificar tipo desa forma. 468 00:25:29,210 --> 00:25:32,598 >> Audiencia: E en segundo lugar, ten un dobre na parte superior. 469 00:25:32,598 --> 00:25:35,502 Pero alí embaixo, cando facer retornar Dobre, 470 00:25:35,502 --> 00:25:38,280 que xa está automaticamente retornando formato dobre. 471 00:25:38,280 --> 00:25:42,278 Por que aínda que define-lo coa frecha na parte superior cun dobre? 472 00:25:42,278 --> 00:25:45,010 >> DAN AMRMENDARIZ: Entón, no caso, isto é parte 473 00:25:45,010 --> 00:25:50,580 as-- para repetir a pregunta, porque é implícita dende o retorno 474 00:25:50,580 --> 00:25:56,030 tipo aquí, que tipo que realmente é, necesitamos ser explícito con Swift 475 00:25:56,030 --> 00:25:59,970 sobre o que queremos volver para fóra desta función 476 00:25:59,970 --> 00:26:02,690 de xeito que, cando se realiza tipo a comprobación, pode que seguro 477 00:26:02,690 --> 00:26:05,850 que o que realmente escrito a continuación, en realidade, está de acordo con iso. 478 00:26:05,850 --> 00:26:10,225 Entón, é como unha especie de cheque consigo mesmo tipo de situación. 479 00:26:10,225 --> 00:26:11,050 Pero hai é-- 480 00:26:11,050 --> 00:26:12,560 >> Audiencia: [inaudível] arco? 481 00:26:12,560 --> 00:26:19,490 >> DAN AMRMENDARIZ: hai casos en que podemos especificar que podemos implicitamente 482 00:26:19,490 --> 00:26:21,550 definir o tipo de retorno. 483 00:26:21,550 --> 00:26:23,940 Pero, neste caso, non creo que ía funcionar. 484 00:26:23,940 --> 00:26:26,190 Hai algunha outra sintaxe que veremos máis adiante. 485 00:26:26,190 --> 00:26:30,320 486 00:26:30,320 --> 00:26:35,280 >> Todo ben, entón esta fonte código é un pouco diferente 487 00:26:35,280 --> 00:26:41,839 porque este analiza argumentos de a función que estamos chamando. 488 00:26:41,839 --> 00:26:44,130 Deixe-me amosar-lle como funciona antes de que realmente seguir adiante 489 00:26:44,130 --> 00:26:48,050 para algunhas cousas interesantes que está a suceder na Swift. 490 00:26:48,050 --> 00:26:51,870 >> Polo tanto, neste caso, se eu executar este código, teña en conta que o que está facendo 491 00:26:51,870 --> 00:26:54,900 mentres é--, que tipo de dáme un erro estraño. 492 00:26:54,900 --> 00:26:59,730 Necesito pasar un par de enteiros como un argumento de liña de comandos. 493 00:26:59,730 --> 00:27:06,220 Entón imos ver, 150 e 80, e prema Intro para descubrir o que está realmente facendo. 494 00:27:06,220 --> 00:27:09,890 É aceptar cada un dos estes valores como enteiros. 495 00:27:09,890 --> 00:27:12,040 É de inserir-las nun libro de notas. 496 00:27:12,040 --> 00:27:14,470 E entón el está executando que o cálculo da media 497 00:27:14,470 --> 00:27:16,650 e saída que como era de esperar. 498 00:27:16,650 --> 00:27:19,950 >> Pero, obviamente, hai algo suceder con ese rexeitar algo 499 00:27:19,950 --> 00:27:23,300 algo así como un enteiro. 500 00:27:23,300 --> 00:27:27,300 Como pode lembrar de cando eramos tratar con argumentos de liña de comandos 501 00:27:27,300 --> 00:27:32,640 en C e outras linguaxes, a primeira 0-th artigo no que o argumento da liña de comandos 502 00:27:32,640 --> 00:27:35,774 lista é o nome do comando que realmente executado. 503 00:27:35,774 --> 00:27:38,690 Polo tanto, neste caso, só estou looping sobre todo os argumentos de liña de comandos. 504 00:27:38,690 --> 00:27:41,650 Pero eu non estou facendo todo tipo de fantasía vaia ir sobre aquel primeiro. 505 00:27:41,650 --> 00:27:45,920 Eu son só explicita ou implicitamente que eu son comprobar que un destes tipos 506 00:27:45,920 --> 00:27:49,900 son enteiros antes de realmente realizar este cálculo. 507 00:27:49,900 --> 00:27:52,420 >> E iso é esencialmente o que está pasando aquí. 508 00:27:52,420 --> 00:27:55,860 Para cada argumento en os argumentos do proceso, 509 00:27:55,860 --> 00:27:59,210 Eu estou indo a realizar algunha comprobación. 510 00:27:59,210 --> 00:28:01,970 E neste caso, eu vou para tratar de primeiro convertido 511 00:28:01,970 --> 00:28:07,620 ese argumento nun número enteiro por realizar unha conversión de tipo explícito, 512 00:28:07,620 --> 00:28:12,310 porque é, na entrada, unha cadea de caracteres e non no feito de un número enteiro. 513 00:28:12,310 --> 00:28:18,140 >> Pero este é un tipo de sintaxe estraño, deixarse ​​de grao é igual a Int (argumento). 514 00:28:18,140 --> 00:28:21,120 O que está realmente a suceder aquí é moi 515 00:28:21,120 --> 00:28:24,390 importante para o seu uso Swift. 516 00:28:24,390 --> 00:28:27,610 Isto é por que é chamado de tipo optativo. 517 00:28:27,610 --> 00:28:34,790 >> Entón esta función, Int (argumento), non só retorna un enteiro, mais retorna 518 00:28:34,790 --> 00:28:37,470 o que se chama un enteiro opcional. 519 00:28:37,470 --> 00:28:41,200 E así se trata dunha especie de un tipo enriba dun tipo. 520 00:28:41,200 --> 00:28:45,900 Podes imaxinar que tipo de como está retornando como un paquete. 521 00:28:45,900 --> 00:28:47,750 E cando abrir ese paquete, quere 522 00:28:47,750 --> 00:28:53,930 ten un número enteiro, o que é o resultado, é non ten absolutamente nada nel en todo. 523 00:28:53,930 --> 00:28:58,140 E iso é útil como unha comprobación de erros mecanismo, porque neste caso 524 00:28:58,140 --> 00:29:02,080 podemos descubrir, foi esta conversión de tipo exitoso? 525 00:29:02,080 --> 00:29:05,810 Se foi, a continuación, é de feito vai ter un número enteiro dentro. 526 00:29:05,810 --> 00:29:08,750 Se non, vai ter algún valor que imos chamar nulo, é dicir 527 00:29:08,750 --> 00:29:10,920 é representativo de calquera número enteiro de todo. 528 00:29:10,920 --> 00:29:13,270 Realmente representativo de nada. 529 00:29:13,270 --> 00:29:18,130 >> E así esta construción se permítenos a desembrulhar ese paquete, 530 00:29:18,130 --> 00:29:19,850 que de conexión opcional. 531 00:29:19,850 --> 00:29:25,560 E se somos capaces de desembrulhar que embalaxe e atopar un número enteiro dentro, 532 00:29:25,560 --> 00:29:27,720 entón o que estamos dicindo aquí é que imos, entón, 533 00:29:27,720 --> 00:29:33,090 facer que o valor a ser definido esta constante chamado grao. 534 00:29:33,090 --> 00:29:36,590 E esta parte do if, a parte superior da instrución if 535 00:29:36,590 --> 00:29:40,390 levará a cabo, porque iso desembrulhar foi un éxito. 536 00:29:40,390 --> 00:29:43,290 >> Se iso só acontece que houbo un erro, quizais, 537 00:29:43,290 --> 00:29:47,040 neste tipo de conversión explícita a partir dunha secuencia de caracteres para un número enteiro, quizais 538 00:29:47,040 --> 00:29:49,160 é o valor ABC por exemplo. 539 00:29:49,160 --> 00:29:52,120 E iso é realmente non vai para converterse nun enteiro. 540 00:29:52,120 --> 00:29:55,520 A continuación, el volverá nil, que non é un número enteiro. 541 00:29:55,520 --> 00:29:57,570 E esta declaración se ben, entón falla. 542 00:29:57,570 --> 00:30:01,930 grao non existirá porque non ten ningún contido enteiro. 543 00:30:01,930 --> 00:30:06,391 E será executado este bloque novo. 544 00:30:06,391 --> 00:30:06,890 Si? 545 00:30:06,890 --> 00:30:09,652 >> Audiencia: Nil é N-I-L? 546 00:30:09,652 --> 00:30:11,110 DAN AMRMENDARIZ: nil é N-I-L, si. 547 00:30:11,110 --> 00:30:14,970 548 00:30:14,970 --> 00:30:20,310 >> Polo tanto, este é quizais un dos cousas máis difíciles de Swift, 549 00:30:20,310 --> 00:30:23,690 especialmente cando se está en as herbas daniñas nunha aplicación IOS 550 00:30:23,690 --> 00:30:27,442 e está realmente intentando para facer un desenvolvemento alí. 551 00:30:27,442 --> 00:30:29,400 Estará gritando en ti sobre opcionais. 552 00:30:29,400 --> 00:30:33,050 Será pregunta para vostede puntos de interrogación e puntos de exclamación. 553 00:30:33,050 --> 00:30:37,100 Pero unha vez que descubrir se out-- dedicar moito tempo para descubrir 554 00:30:37,100 --> 00:30:41,990 o que está pasando cos tipos de opcionais, vai gardar unha chea de dor de cabeza 555 00:30:41,990 --> 00:30:46,040 como estás escribir unha aplicación Swift. 556 00:30:46,040 --> 00:30:47,660 >> En realidade, é un recurso moi poderoso. 557 00:30:47,660 --> 00:30:49,826 E vai ter que tomar miña palabra para ela por agora. 558 00:30:49,826 --> 00:30:52,620 Pero imos ver esa construción e algúns outros como 559 00:30:52,620 --> 00:30:56,740 nalgunhas das outras código fonte que imos amosar-lle en só un pouco. 560 00:30:56,740 --> 00:31:00,440 >> Existen dúbidas iniciais aquí? 561 00:31:00,440 --> 00:31:03,790 562 00:31:03,790 --> 00:31:08,690 Así, o importante é que estaladiça un Tipo opcional é unha especie de metatype. 563 00:31:08,690 --> 00:31:12,500 Ou ela ten un valor, e se isto acontecer, el 564 00:31:12,500 --> 00:31:18,110 quizais teña que valor asociado con el, ou ela non ten valor algún, 565 00:31:18,110 --> 00:31:19,620 e é representado por nulo. 566 00:31:19,620 --> 00:31:24,210 567 00:31:24,210 --> 00:31:28,870 O resto esta é quizais como sería de esperar. 568 00:31:28,870 --> 00:31:32,900 >> Entón, imos rampla ata o dificultade máis dunha vez. 569 00:31:32,900 --> 00:31:37,070 E esta vez, imos dar un ollo a algunhas outros tipos de datos que realmente existen. 570 00:31:37,070 --> 00:31:41,290 Un deles é dicionarios, que é moi semellante ao dicionarios Python. 571 00:31:41,290 --> 00:31:48,270 É un pouco semellante a unha táboa hash C. É, esencialmente, un mapa de teclas 572 00:31:48,270 --> 00:31:49,820 onde as claves poden ser cadeas. 573 00:31:49,820 --> 00:31:52,670 E cando mira cara arriba esas claves, aquelas claves terán un valor. 574 00:31:52,670 --> 00:31:56,020 Polo tanto, non é unha real orde, pero no seu lugar, máis estreitamente asociados 575 00:31:56,020 --> 00:31:58,810 a un mapa de hash ou unha táboa hash. 576 00:31:58,810 --> 00:32:02,420 >> Imos ver como isto se quere para traballar antes de que efectivamente 577 00:32:02,420 --> 00:32:05,210 ir ao propio código fonte. 578 00:32:05,210 --> 00:32:07,680 Se eu executar este, nada realmente acontece. 579 00:32:07,680 --> 00:32:12,430 Está me dicindo que eu estou esperando algúns parámetros de tipo seguinte. 580 00:32:12,430 --> 00:32:16,050 Entón, eu estou indo a proporcionar a que algúns nomes conxunto de problemas, 581 00:32:16,050 --> 00:32:18,490 pset0 así, quizais eu teño 100. 582 00:32:18,490 --> 00:32:20,790 E pset1, eu teño a 5. 583 00:32:20,790 --> 00:32:24,630 E entón o exame, eu fixo moi ben e conseguiu 30. 584 00:32:24,630 --> 00:32:27,180 E oops, eu bati un espazo aquí. 585 00:32:27,180 --> 00:32:30,940 >> Cando prema Intro, podes ver el realiza algunha computación. 586 00:32:30,940 --> 00:32:33,740 Di gradebook é de tres notas, pset1, pset0, exame. 587 00:32:33,740 --> 00:32:36,120 E o libro de notas ten esta media específica. 588 00:32:36,120 --> 00:32:38,370 Entón, de novo, estamos a traballar con esta idea gradebook, 589 00:32:38,370 --> 00:32:44,650 pero imos seguir iteración coa complexidade da nosa función. 590 00:32:44,650 --> 00:32:47,650 >> Entón, en principio, somos só vai crear unha función que 591 00:32:47,650 --> 00:32:49,390 é responsable de imprimir o seu uso. 592 00:32:49,390 --> 00:32:51,920 E hai esa saída función que será só 593 00:32:51,920 --> 00:32:53,710 forzosamente saír da aplicación. 594 00:32:53,710 --> 00:32:56,530 Isto non é algo que vai empregar en iOS app. 595 00:32:56,530 --> 00:32:59,750 Esta é só neste caso cun argumento da liña de comandos. 596 00:32:59,750 --> 00:33:01,990 A continuación, imos comezar a moverse cara Xcode. 597 00:33:01,990 --> 00:33:07,760 Pero esta é específica para un comando programa de estilo de liña en Swift. 598 00:33:07,760 --> 00:33:11,490 >> Imos dar un ollo a algunhas das as cousas interesantes aquí. 599 00:33:11,490 --> 00:33:15,150 A ver, só un par de cousas interesantes para falar quizais 600 00:33:15,150 --> 00:33:19,930 é que na miña función de imprimir o número de graos, 601 00:33:19,930 --> 00:33:26,090 ten que se lembrar que eu tiña que lista de pset1 itens--, pset0, e exame. 602 00:33:26,090 --> 00:33:29,130 Realmente pode rapidamente e facelo facilmente 603 00:33:29,130 --> 00:33:34,490 tomando o libro de notas, que é un dicionario que ten claves e valores. 604 00:33:34,490 --> 00:33:38,730 Atopar todas a clave é a través o método de puntos claves aquí, 605 00:33:38,730 --> 00:33:43,180 e, a continuación, usar este joinWithSeparator, que, entón, tomar todas as claves 606 00:33:43,180 --> 00:33:48,590 que tiñamos escritas ou pset1-- Sentímolo, pset0, pset1, e exam-- 607 00:33:48,590 --> 00:33:53,030 e concatenar-los xuntos usando unha coma e un espazo 608 00:33:53,030 --> 00:33:55,400 para crear unha cadea longa. 609 00:33:55,400 --> 00:34:00,190 Esta operación de unión é só fenomenal útiles nunha variedade de contextos. 610 00:34:00,190 --> 00:34:03,450 E así é esta joinWithSeparator. 611 00:34:03,450 --> 00:34:06,939 >> E iso é algo que é Swift modificado de 1 a 2 SWIFT. 612 00:34:06,939 --> 00:34:08,730 Adoitaba haber un Style-- Python se é 613 00:34:08,730 --> 00:34:13,219 familiarizado con Python-- un Python estilo xuntar método en cadeas. 614 00:34:13,219 --> 00:34:15,699 Pero isto non é máis o caso en Swift 2. 615 00:34:15,699 --> 00:34:19,400 Quere usar isto se quere para concatenar unha serie de cousas 616 00:34:19,400 --> 00:34:23,380 xunto cunha corda. 617 00:34:23,380 --> 00:34:27,889 >> Polo que, se cadra, a continuación, na nosa discusión de medio antes, 618 00:34:27,889 --> 00:34:32,659 fai algo máis de sentido para nós para definir a función media 619 00:34:32,659 --> 00:34:36,610 para ser un dúo opcional no canto que só unha parella explícito. 620 00:34:36,610 --> 00:34:39,239 Porque tivemos que condición inusual, onde, 621 00:34:39,239 --> 00:34:41,550 o que en realidade se gradebook non ten valores dentro del? 622 00:34:41,550 --> 00:34:44,280 Cal debe ser o retorno medio? 623 00:34:44,280 --> 00:34:46,350 >> Ben, quizais en C ti faría algo 624 00:34:46,350 --> 00:34:50,040 como forneceu un valor de sentinela, como 0.0, ou que un número negativo, 625 00:34:50,040 --> 00:34:53,690 ou só algo que representa o feito de que había algunha condición de erro 626 00:34:53,690 --> 00:34:57,910 e quizais non teñen efecto a capacidade de calcular esa media. 627 00:34:57,910 --> 00:35:05,590 Ben, a beleza de especificar un opcional tipo sería facelo. 628 00:35:05,590 --> 00:35:09,540 E eu digo agora todas estas palabras, pero iso realmente non usa opcionais. 629 00:35:09,540 --> 00:35:12,970 Pero imos ver iso en só minutos onde podemos definir media 630 00:35:12,970 --> 00:35:17,230 ser un tipo de datos de xeito que opcional se realmente retorna algúns datos, a continuación, 631 00:35:17,230 --> 00:35:18,470 imos voltar estes datos. 632 00:35:18,470 --> 00:35:20,570 Se non, imos volver nil, dicindo que este 633 00:35:20,570 --> 00:35:22,200 Non ten computación significativa. 634 00:35:22,200 --> 00:35:25,650 635 00:35:25,650 --> 00:35:28,570 >> Imos pasar a outra cousa. 636 00:35:28,570 --> 00:35:35,910 Así, a partir de aquí, nós estiven mirando todos estes exemplos na liña de comandos. 637 00:35:35,910 --> 00:35:39,470 Pero realmente o que está indo estar lidando con é Xcode. 638 00:35:39,470 --> 00:35:43,720 E unha das cousas agradables sobre Xcode é, e especialmente en Swift, 639 00:35:43,720 --> 00:35:47,450 é que temos esta cousa chamada un parque infantil. 640 00:35:47,450 --> 00:35:51,470 E un parque infantil é non é de todo unha aplicación iOS. 641 00:35:51,470 --> 00:35:54,751 Pero permite que a probar con Swift dun xeito moi doado. 642 00:35:54,751 --> 00:35:56,000 Podes escribir todo o seu código. 643 00:35:56,000 --> 00:35:58,140 É ben sintaxe destaque aquí. 644 00:35:58,140 --> 00:36:01,600 Cando se crea un novo ficheiro, ha pedir se quere crear un campo de xogos. 645 00:36:01,600 --> 00:36:08,720 Pero a cousa agradable sobre o campo de xogos é que na parte dereita da súa xanela, 646 00:36:08,720 --> 00:36:12,020 realmente amosar-lle saída do seu código. 647 00:36:12,020 --> 00:36:16,110 Entón, se eu rolar para abaixo, podemos ver que a saída de varias liñas de código 648 00:36:16,110 --> 00:36:17,200 de feito pasa a ser. 649 00:36:17,200 --> 00:36:19,850 650 00:36:19,850 --> 00:36:26,790 >> Polo tanto, neste caso, imos cambiar de dirección só un pouco 651 00:36:26,790 --> 00:36:30,960 e falar de algo que é realmente importante deste xeito alto nivel 652 00:36:30,960 --> 00:36:34,020 Swift que opera, e é esa idea de clausura. 653 00:36:34,020 --> 00:36:36,960 E probablemente xa viu este un pouco en JavaScript. 654 00:36:36,960 --> 00:36:40,770 Para aqueles de vostedes que están en CS50, peches 655 00:36:40,770 --> 00:36:47,240 son moi populares xeito moi boa de facer, cousas de alto nivel en linguas modernas. 656 00:36:47,240 --> 00:36:50,270 Pero é tamén unha especie de difícil romper a cabeza en torno ao primeiro tempo. 657 00:36:50,270 --> 00:36:52,269 Entón, se ollar para este primeira vez, iso é OK. 658 00:36:52,269 --> 00:36:56,740 Basta ollar para o código fonte e vexa se pode descubrir iso na casa. 659 00:36:56,740 --> 00:37:01,050 >> Polo tanto, neste caso, imos dicir que nós quere crear unha morea de expoñentes 660 00:37:01,050 --> 00:37:04,134 con algún valor fixo. 661 00:37:04,134 --> 00:37:05,800 Polo tanto, neste caso, podo crear unha función. 662 00:37:05,800 --> 00:37:09,270 Vou chamalo de poder de 2 propósito cuxo único na vida 663 00:37:09,270 --> 00:37:15,770 é tomar algunha entrada e dobre del, e voltar ese valor. 664 00:37:15,770 --> 00:37:21,210 Lembre que aquí estou eu aceptar un tipo de datos. 665 00:37:21,210 --> 00:37:23,137 Vai ser unha variable chamada x. 666 00:37:23,137 --> 00:37:23,970 É do tipo Double. 667 00:37:23,970 --> 00:37:26,190 E eu estou indo a retornar unha parella aquí. 668 00:37:26,190 --> 00:37:29,100 E eu estou indo só para facer moi, francamente, moi 669 00:37:29,100 --> 00:37:32,650 xeito inxenua de duplicar esta cifra. 670 00:37:32,650 --> 00:37:35,600 E eu vou te amosar por que isto é útil en só un segundo. 671 00:37:35,600 --> 00:37:40,418 >> Teña en conta que aquí temos esa gama de novo. para algo en 1, punto 672 00:37:40,418 --> 00:37:44,130 punto a punto, 2, o que significa que este lazo levará a cabo dúas veces. 673 00:37:44,130 --> 00:37:46,480 Pero iso representa unha variable dummy. 674 00:37:46,480 --> 00:37:49,650 Isto significa que eu non estou indo realmente para estar usando esa variable en calquera lugar 675 00:37:49,650 --> 00:37:51,070 no interior deste circuíto. 676 00:37:51,070 --> 00:37:55,380 Eu só quero que esta liña de código para ser executado dúas veces, 677 00:37:55,380 --> 00:37:58,980 sen precisar saber o valor do dito período. 678 00:37:58,980 --> 00:38:02,570 >> Polo tanto, neste caso eu estou correndo resultado veces x dúas veces e que, esencialmente, 679 00:38:02,570 --> 00:38:06,560 significa que eu estou en cuadratura con este valor. 680 00:38:06,560 --> 00:38:10,230 E isto ocorre con traballar como sería de esperar. 681 00:38:10,230 --> 00:38:16,410 Potencia de 2, pasando un valor de 2.0 ofrécenos unha saída de 4. 682 00:38:16,410 --> 00:38:18,810 3.2 obras para 10,24. 683 00:38:18,810 --> 00:38:22,660 >> Agora podemos facer un semellante cousa de poder, de 3. 684 00:38:22,660 --> 00:38:25,330 Pero agora cambiar só o intervalo. 685 00:38:25,330 --> 00:38:28,840 Para dummy en 1 a 3, multiplicar 3 veces, 686 00:38:28,840 --> 00:38:29,830 e facer o mesmo. 687 00:38:29,830 --> 00:38:32,240 >> Polo tanto, este pode sentirse un pouco artificial. 688 00:38:32,240 --> 00:38:34,270 Pero hai unha importante cousa aquí que 689 00:38:34,270 --> 00:38:37,770 é que mirando para estes dúas funcións, hai 690 00:38:37,770 --> 00:38:43,600 só unha cousa que é diferente, que é o valor no rango. 691 00:38:43,600 --> 00:38:46,910 Todo máis sobre estes dous funcións, potencia de 3 e potencia de 2, 692 00:38:46,910 --> 00:38:50,440 son, de feito, idénticas porque funcionan do mesmo xeito. 693 00:38:50,440 --> 00:38:53,460 >> Entón, neste momento, un pouco campá de alarma debe ser a saír. 694 00:38:53,460 --> 00:38:56,200 Esperemos que o que está dicindo, vostede sabe, este se sente un pouco 695 00:38:56,200 --> 00:38:59,250 como a duplicación de esforzos. 696 00:38:59,250 --> 00:39:02,950 Se houbese un xeito que eu faría poder encapsulado todo isto 697 00:39:02,950 --> 00:39:06,630 e proporcionar unha función ou crear unha función que 698 00:39:06,630 --> 00:39:11,550 fai exactamente o que quero, sen a necesidade de escriba-la explicitamente. 699 00:39:11,550 --> 00:39:15,732 E iso é o que o poder dun peche nos permite facer. 700 00:39:15,732 --> 00:39:16,940 Entón, imos dar un ollo niso. 701 00:39:16,940 --> 00:39:18,700 E eu vou pasar un par minutos a esta, porque esta 702 00:39:18,700 --> 00:39:20,310 é moi importante para a Swift. 703 00:39:20,310 --> 00:39:22,900 Vémolo o tempo. 704 00:39:22,900 --> 00:39:24,550 Imos definir unha función. 705 00:39:24,550 --> 00:39:26,380 Será chamado powerof. 706 00:39:26,380 --> 00:39:29,470 Vai aceptar un parámetro chamado y do tipo Int. 707 00:39:29,470 --> 00:39:32,220 Pero bótalle un ollo ao tipo de retorno. 708 00:39:32,220 --> 00:39:38,730 O tipo de retorno é, na parénteses, Double frecha dobre. 709 00:39:38,730 --> 00:39:43,370 O que significa que esta función, powerof esta función, 710 00:39:43,370 --> 00:39:46,550 está retornando dunha función. 711 00:39:46,550 --> 00:39:50,845 Isto está aceptando unha parella e retornando un dobre. 712 00:39:50,845 --> 00:39:53,720 De xeito que pode parecer medio tolo, pero imos rolar para abaixo un pouco 713 00:39:53,720 --> 00:39:55,060 e mirar a ver que pasa. 714 00:39:55,060 --> 00:39:57,910 Estamos dentro desa función powerof. 715 00:39:57,910 --> 00:40:00,760 Estamos creando unha nova función chamado exponentiator, 716 00:40:00,760 --> 00:40:02,900 pero non importa o que é. 717 00:40:02,900 --> 00:40:06,410 >> Teña en conta que este ten un valor de entrada de x. 718 00:40:06,410 --> 00:40:09,910 E está levando nunha doble e retornando un dobre. 719 00:40:09,910 --> 00:40:16,320 E isto é o mesmo código que viu anteriormente, agás que o valor de 2 720 00:40:16,320 --> 00:40:20,060 ou o valor de 3, de que límite superior do intervalo, 721 00:40:20,060 --> 00:40:23,210 foi substituído este valor de y, que 722 00:40:23,210 --> 00:40:27,230 foi o parámetro de inicio da nosa función powerof. 723 00:40:27,230 --> 00:40:31,700 E, neste punto, nós voltar exponentiator. 724 00:40:31,700 --> 00:40:33,345 Estamos volvendo a función. 725 00:40:33,345 --> 00:40:36,300 726 00:40:36,300 --> 00:40:39,550 >> É como unha especie de pequena mente blowing. 727 00:40:39,550 --> 00:40:44,360 Pero imos imaxinar o que acontece cando chamar esa función powerof 728 00:40:44,360 --> 00:40:47,610 e pasar el algún valor como 2. 729 00:40:47,610 --> 00:40:50,020 O que isto significa que Agora teño o valor 730 00:40:50,020 --> 00:40:55,130 2 para y, o que significa que o valor y nesta función exponentiator 731 00:40:55,130 --> 00:40:56,410 será que o valor 2. 732 00:40:56,410 --> 00:41:01,290 Pero eu estou volvendo este exponentiator función. 733 00:41:01,290 --> 00:41:05,900 >> Entón, teña en conta o que Swift di que eu crearon neste caso. 734 00:41:05,900 --> 00:41:10,550 deixe praza é unha definición, é unha función que acepta un dobre 735 00:41:10,550 --> 00:41:12,610 e retorna un dobre. 736 00:41:12,610 --> 00:41:16,590 Eu creei unha función que algo cadrados 737 00:41:16,590 --> 00:41:19,782 mediante este mecanismo aquí. 738 00:41:19,782 --> 00:41:22,490 E realmente o que está pasando é que está retornando esta función 739 00:41:22,490 --> 00:41:26,390 exponentiator, pero este valor y está implicado dentro del. 740 00:41:26,390 --> 00:41:31,080 E entón agora cada vez que eu usar este esta variable ou constante chamada 741 00:41:31,080 --> 00:41:35,180 praza, que vai a comportarse como unha función. 742 00:41:35,180 --> 00:41:39,960 E para que eu poida, a continuación, chamar esa variable como eu chamaría dunha función, 743 00:41:39,960 --> 00:41:43,830 e pasala a un número, como neste caso 3. 744 00:41:43,830 --> 00:41:45,910 E eu, entón, conciliar ese valor. 745 00:41:45,910 --> 00:41:53,340 Entón, a continuación, 3 ao cadrado chegar a ser 9, como vemos aquí. 746 00:41:53,340 --> 00:41:56,530 >> Realmente tolo, pero iso agora me permite a oportunidade 747 00:41:56,530 --> 00:41:59,040 para crear outras funcións powerof. 748 00:41:59,040 --> 00:42:03,680 Como podo dicir, OK, ben, agora quero para crear unha nova función, powerof (3), 749 00:42:03,680 --> 00:42:06,290 e almacenar iso nun chamado cubo constante. 750 00:42:06,290 --> 00:42:10,220 E agora cubo será un función separada que, a continuación, 751 00:42:10,220 --> 00:42:14,800 levar moito valor como entrada e cubo que valor, como vemos na liña de fondo 752 00:42:14,800 --> 00:42:16,420 aquí. 753 00:42:16,420 --> 00:42:18,590 cubo de 2 vai producir 8. 754 00:42:18,590 --> 00:42:21,330 755 00:42:21,330 --> 00:42:22,680 >> Esperemos que cousas moi ordenado. 756 00:42:22,680 --> 00:42:25,920 Nunca viu iso antes. 757 00:42:25,920 --> 00:42:29,990 Estimula-vos a ollar para peches e investigar isto un pouco máis. 758 00:42:29,990 --> 00:42:33,570 É unha cousa realmente poderosa vemos unha morea en JavaScript e outras linguaxes. 759 00:42:33,570 --> 00:42:37,160 Realmente vital para APIs comprender ben 760 00:42:37,160 --> 00:42:38,620 que nós imos chegar a en só un segundo. 761 00:42:38,620 --> 00:42:39,456 Si? 762 00:42:39,456 --> 00:42:43,740 >> Audiencia: Cando fai powerof (2), parénteses, e, a continuación 763 00:42:43,740 --> 00:42:48,764 outro paréntese, outro input-- basicamente está substituíndo a praza. 764 00:42:48,764 --> 00:42:50,930 DAN AMRMENDARIZ: Entón mire na última liña aquí. 765 00:42:50,930 --> 00:42:55,930 En realidade, é totalmente posible facelo fío como suxeriu. 766 00:42:55,930 --> 00:43:00,990 Entón powerof (5) significa que imos ter un exponentiator de 5 ata aquí. 767 00:43:00,990 --> 00:43:04,160 Polo tanto, este é esencialmente será o mesmo que 4 para o quinto poder, 768 00:43:04,160 --> 00:43:07,200 porque creamos un exponencializando funcionar ao quinto poder, 769 00:43:07,200 --> 00:43:09,920 e estamos pasando para que funciona o valor 4. 770 00:43:09,920 --> 00:43:12,619 E nós temos ese valor que esperamos, 1024. 771 00:43:12,619 --> 00:43:14,785 Audiencia: E non é un nomear, polo que fai máis doado 772 00:43:14,785 --> 00:43:16,570 a ler, a praza que sexa. 773 00:43:16,570 --> 00:43:17,903 >> DAN AMRMENDARIZ: Correcto, exactamente. 774 00:43:17,903 --> 00:43:21,120 Entón, antes de poñer-la nunha constante aquí para 775 00:43:21,120 --> 00:43:23,808 que fixo doado de usar ese nome. 776 00:43:23,808 --> 00:43:24,308 Si? 777 00:43:24,308 --> 00:43:26,942 >> Audiencia: Neste contexto powerof, é parte 778 00:43:26,942 --> 00:43:30,774 da linguaxe de programación en oposición á forma como 779 00:43:30,774 --> 00:43:33,952 pensar en powerof en [inaudível]? 780 00:43:33,952 --> 00:43:35,660 DAN AMRMENDARIZ: Entón, Neste caso, powerof 781 00:43:35,660 --> 00:43:39,280 é simplemente o nome do función que eu definido aquí enriba. 782 00:43:39,280 --> 00:43:41,801 Polo tanto, non é inherente á propia linguaxe, 783 00:43:41,801 --> 00:43:43,550 mais en vez diso, é só unha función que posúe 784 00:43:43,550 --> 00:43:45,628 ese nome porque darlle ese nome. 785 00:43:45,628 --> 00:43:48,770 786 00:43:48,770 --> 00:43:51,920 Algunha pregunta? 787 00:43:51,920 --> 00:43:52,800 Todo ben. 788 00:43:52,800 --> 00:43:54,750 >> Agora, iso é gran. 789 00:43:54,750 --> 00:43:58,170 Pero non vai ver un serie de funcións de peche que 790 00:43:58,170 --> 00:44:03,440 son coma este onde define, dentro dunha función, outra función. 791 00:44:03,440 --> 00:44:04,320 E pode facelo. 792 00:44:04,320 --> 00:44:06,430 Pero non é o tipo de realmente necesario, non? 793 00:44:06,430 --> 00:44:09,189 Por que eu definir esta función chamada exponentiator 794 00:44:09,189 --> 00:44:10,480 e, a continuación, devolve-lo inmediatamente. 795 00:44:10,480 --> 00:44:15,220 Por que non podo só inmediatamente volver esa función? 796 00:44:15,220 --> 00:44:18,890 >> E, de feito, este é precisamente a idea detrás de un concepto chamado 797 00:44:18,890 --> 00:44:22,410 funcións anónimas, onde funcións anónimas en realidade non 798 00:44:22,410 --> 00:44:25,270 ten un nome, porque Non é necesario ter un. 799 00:44:25,270 --> 00:44:28,700 E así, neste caso, en 7B, podemos atopar exactamente o que. 800 00:44:28,700 --> 00:44:31,470 É todo o mesmo código, fai exactamente o mesmo, 801 00:44:31,470 --> 00:44:35,570 pero agora nós cambiamos-lo un pouco para que esta función powerof inmediatamente 802 00:44:35,570 --> 00:44:37,750 retorna unha función. 803 00:44:37,750 --> 00:44:44,150 Teña en conta que tras o regreso, hai un paréntese aberta. 804 00:44:44,150 --> 00:44:46,410 Está esperando esta entrada dobre. 805 00:44:46,410 --> 00:44:48,560 Está esperando que a saída de parella. 806 00:44:48,560 --> 00:44:52,175 E, a continuación, o seu contrasinal separa o código en si. 807 00:44:52,175 --> 00:44:53,550 Polo tanto, esta é unha función anónima. 808 00:44:53,550 --> 00:44:57,030 En realidade, non ten un nome, mentres antes de ser chamado exponentiator. 809 00:44:57,030 --> 00:45:00,229 Pero, como vimos, só realmente non se refería a exponentiator 810 00:45:00,229 --> 00:45:01,270 fóra desa función. 811 00:45:01,270 --> 00:45:02,470 Por iso, non importa. 812 00:45:02,470 --> 00:45:06,300 Polo tanto, esta función anónima é así chamado porque é sen nome, 813 00:45:06,300 --> 00:45:09,107 pero aínda está a ser usado no contexto deste código. 814 00:45:09,107 --> 00:45:13,690 815 00:45:13,690 --> 00:45:16,079 >> A parella próximo que eu son seguirá esperanza 816 00:45:16,079 --> 00:45:17,370 golpe súa mente un pouco. 817 00:45:17,370 --> 00:45:20,410 Podemos simplificar aínda máis. 818 00:45:20,410 --> 00:45:24,490 Porque, como foi astutamente apuntado anteriormente, 819 00:45:24,490 --> 00:45:29,100 quizais nós realmente sabe, por inferindo a partir deste código, o que 820 00:45:29,100 --> 00:45:31,750 a saída deste código será. 821 00:45:31,750 --> 00:45:38,180 E, de feito, nesta función anónima, que pode, de feito, inferir tipo de datos. 822 00:45:38,180 --> 00:45:41,650 >> Entón, nun presente, xa non que definir explicitamente 823 00:45:41,650 --> 00:45:44,850 o tipo de datos que está a ser entrada e saída desta función 824 00:45:44,850 --> 00:45:45,890 para un par de razóns. 825 00:45:45,890 --> 00:45:51,390 Unha delas é que definimos, ata o prototipo da función delimitador, 826 00:45:51,390 --> 00:45:55,770 que tipo de datos que este anónimos función debe entrada e saída. 827 00:45:55,770 --> 00:45:57,900 E do outro, nós pódese inferir a partir do código 828 00:45:57,900 --> 00:46:01,930 aquí estamos aceptando entrada que é o tipo Double 829 00:46:01,930 --> 00:46:03,670 e retornando un dobre. 830 00:46:03,670 --> 00:46:07,890 >> Teña en conta que aquí non ten explicitamente definido os nomes dos argumentos 831 00:46:07,890 --> 00:46:11,220 que esta función está aceptando. 832 00:46:11,220 --> 00:46:16,180 E así vemos que pode referirse a estes parámetros usando US $ 0, $ 1, 833 00:46:16,180 --> 00:46:20,140 así por diante e así por diante, dependendo que o número de parámetros usados 834 00:46:20,140 --> 00:46:20,850 nesta función. 835 00:46:20,850 --> 00:46:23,370 836 00:46:23,370 --> 00:46:29,740 >> Isto é algo que está indo para ver unha chea é este paréntese aberta 837 00:46:29,740 --> 00:46:32,797 seguido por unha definición R $ 0, e despois dalgún operación, 838 00:46:32,797 --> 00:46:34,130 e, a continuación, un paréntese pechada. 839 00:46:34,130 --> 00:46:38,630 Esa é unha función anónima que executa esta operación. 840 00:46:38,630 --> 00:46:42,940 Ten ese parámetro onde é tipo é inferido. 841 00:46:42,940 --> 00:46:44,860 Ese primeiro parámetro é $ 0. 842 00:46:44,860 --> 00:46:49,010 E algunha operación é pasando naquel $ 0. 843 00:46:49,010 --> 00:46:52,100 >> Audiencia: Entón o cifrão parámetro significa basicamente 844 00:46:52,100 --> 00:46:53,429 e 0 significa o primeiro? 845 00:46:53,429 --> 00:46:54,720 DAN Armendáriz: Isto é correcto. 846 00:46:54,720 --> 00:46:59,100 Así, o sinal de dólar significa basicamente parámetro, e 0 significa que a primeira. 847 00:46:59,100 --> 00:47:02,760 Pero funciona especificamente en Neste caso onde non nomeado 848 00:47:02,760 --> 00:47:07,940 os argumentos a miña función anónima. 849 00:47:07,940 --> 00:47:11,119 >> Audiencia: Será que Perl ou algo ten este sinal de dólar, dólar 0 alí? 850 00:47:11,119 --> 00:47:12,702 DAN Armendáriz: Será que, me desculpe? 851 00:47:12,702 --> 00:47:15,360 Audiencia: Será que Perl ten esta dólar 0, dólar 1-- 852 00:47:15,360 --> 00:47:17,318 DAN Armendáriz: Non son moi familiarizado con Perl, 853 00:47:17,318 --> 00:47:21,340 PHP pero o que define variables con base en sinais de dólar. 854 00:47:21,340 --> 00:47:26,120 E pode haber algúns idiomas que teñen características como esta. 855 00:47:26,120 --> 00:47:28,240 De feito, Swift pide unha chea de recursos como este 856 00:47:28,240 --> 00:47:29,489 desde unha morea de outras linguas. 857 00:47:29,489 --> 00:47:32,380 Vemos indicios de Python na mesma. 858 00:47:32,380 --> 00:47:35,800 Esta definición de tipo parece vir do OCaml. 859 00:47:35,800 --> 00:47:38,932 E nós temos só unha morea de material de lotes de diferentes linguas. 860 00:47:38,932 --> 00:47:40,640 Ese é un dos agradable cousas sobre Swift 861 00:47:40,640 --> 00:47:43,390 é que ten unha morea de o mellor ideas dun grupo de idiomas 862 00:47:43,390 --> 00:47:47,229 e shoehorns-los todos xuntos nunha linguaxe super. 863 00:47:47,229 --> 00:47:49,520 En realidade, se me permiten a seguir soprando a súa mente, 864 00:47:49,520 --> 00:47:51,000 polo que temos está a facer todo isto. 865 00:47:51,000 --> 00:47:56,690 Podemos quizais simplificar isto un pouco bit por entender que, por suposto, 866 00:47:56,690 --> 00:48:02,120 Swift ten unha exponencializando función incorporada. 867 00:48:02,120 --> 00:48:04,660 Se eu importar Darwin, que é só que a biblioteca 868 00:48:04,660 --> 00:48:09,680 presenta esta función chamada prisioneiro de guerra, agora Podo simplificar o meu poder de función 869 00:48:09,680 --> 00:48:11,830 para ser o seguinte. 870 00:48:11,830 --> 00:48:15,860 Vai volver esta función anónima. 871 00:48:15,860 --> 00:48:17,950 >> Pero mire o quão simple iso é agora. 872 00:48:17,950 --> 00:48:22,780 Esta é unha función anónima que está a aceptar datos de calquera tipo, 873 00:48:22,780 --> 00:48:26,600 e que vai ser un argumento concreto, 874 00:48:26,600 --> 00:48:29,320 referenciada en $ 0 que é o tipo Double. 875 00:48:29,320 --> 00:48:32,680 Vai voltar un tipo dobre. 876 00:48:32,680 --> 00:48:35,760 Pero a instrución de retorno agora é implícito. 877 00:48:35,760 --> 00:48:39,990 >> E é este estilo exacto que é moi, moi prevalente na Swift, 878 00:48:39,990 --> 00:48:40,790 en todo o lugar. 879 00:48:40,790 --> 00:48:43,190 Nós imos ver iso todo o tempo en Swift. 880 00:48:43,190 --> 00:48:46,150 Entón, eu estou mostrando todo isto para vostede por causa desa sintaxe. 881 00:48:46,150 --> 00:48:49,070 Isto é moi común a ver, o que significa que 882 00:48:49,070 --> 00:48:51,420 é unha función anónima que está a realizar 883 00:48:51,420 --> 00:48:54,640 algunha operación sobre estes argumentos. 884 00:48:54,640 --> 00:48:56,940 E hai un retorno implícito. 885 00:48:56,940 --> 00:49:01,850 Por iso, é absolutamente o mesmo para dicir isto, aquí mesmo. 886 00:49:01,850 --> 00:49:05,730 887 00:49:05,730 --> 00:49:08,150 >> Porque este rizado soporte é unha función, 888 00:49:08,150 --> 00:49:10,480 estamos a cabo esta operación no primeiro argumento. 889 00:49:10,480 --> 00:49:12,170 Nós imos voltar iso. 890 00:49:12,170 --> 00:49:14,815 Pero ese retorno exterior é volvendo toda esa función, 891 00:49:14,815 --> 00:49:19,855 Toda esa función anónima que acaba de crear. 892 00:49:19,855 --> 00:49:21,689 Algunha pregunta? 893 00:49:21,689 --> 00:49:23,980 Todo ben, eu non sei se vostedes están preparados para iso, 894 00:49:23,980 --> 00:49:27,455 pero podemos ir aínda máis tolo con Swift. 895 00:49:27,455 --> 00:49:28,560 Está preparado? 896 00:49:28,560 --> 00:49:29,930 OK, iso é gran. 897 00:49:29,930 --> 00:49:35,310 >> Agora nós realmente ter a capacidade para, en Swift, debido á forma como modular 898 00:49:35,310 --> 00:49:39,650 e como protocolo baseado é, a definir os nosos propios operadores que freaking. 899 00:49:39,650 --> 00:49:44,060 Como neste caso, non tiñamos operador para exponentiation-- ben, 900 00:49:44,060 --> 00:49:47,990 para a realización de poderes de algo. 901 00:49:47,990 --> 00:49:53,632 Pero eu podo, na Swift, establecer un novo operador que fai precisamente iso. 902 00:49:53,632 --> 00:49:55,590 Polo tanto, neste caso hai unha banda de sintaxe aquí. 903 00:49:55,590 --> 00:49:59,980 E eu vou permitir que miralo na casa cando mira para isto. 904 00:49:59,980 --> 00:50:06,890 Pero estamos definindo este infix operador, **, que ha permitir-nos, 905 00:50:06,890 --> 00:50:09,840 definindo o que iso ** Función realmente 906 00:50:09,840 --> 00:50:15,010 que, para aceptar unha man esquerda lado e un lado dereito, 907 00:50:15,010 --> 00:50:21,190 e, a continuación, volver para o expoñente desta á esquerda cara á dereita. 908 00:50:21,190 --> 00:50:24,850 >> E agora, de súpeto eu crearon un novo numerador. 909 00:50:24,850 --> 00:50:29,490 Entón, 2 ** 3 significa 2 para a terceira potencia. 910 00:50:29,490 --> 00:50:34,420 [MENTE SÃ vento] Este á en si debe facer vostede ser como, 911 00:50:34,420 --> 00:50:37,960 OK, parafuso C. Vou Swift todo o camiño. 912 00:50:37,960 --> 00:50:38,740 Isto é óptimo. 913 00:50:38,740 --> 00:50:40,140 Iso é moi fantástico. 914 00:50:40,140 --> 00:50:42,240 >> Aínda que este é un gran exemplo. 915 00:50:42,240 --> 00:50:45,570 Pero eu nunca teño xa fóra deste exemplo realmente 916 00:50:45,570 --> 00:50:46,800 definida meu propio operador. 917 00:50:46,800 --> 00:50:49,710 Pero aínda así, el mostra unha Moito do poder do Swift 918 00:50:49,710 --> 00:50:54,050 e por que iso é, en realidade, realmente moi legal. 919 00:50:54,050 --> 00:50:55,832 OK, si? 920 00:50:55,832 --> 00:50:57,790 Audiencia: Se vostede é establecer o seu propio operador, 921 00:50:57,790 --> 00:51:02,940 como vostede sabe que non accidentalmente intentar crear un operador que é 922 00:51:02,940 --> 00:51:06,040 nalgún lugar en C, como oculto nalgún lugar Swift, 923 00:51:06,040 --> 00:51:12,210 como unha escura, que Pode non ter visto antes. 924 00:51:12,210 --> 00:51:15,050 >> DAN Armendáriz: Entón, se está tentando para definir os seus propios operadores, 925 00:51:15,050 --> 00:51:20,970 existe o risco de que define un sobre un operador existente. 926 00:51:20,970 --> 00:51:24,870 Que entra en un nivel de detalle que Eu non creo que temos tempo para pasar por riba. 927 00:51:24,870 --> 00:51:27,620 Pero iso é un risco. 928 00:51:27,620 --> 00:51:31,320 E iso é de feito a razón pola que Non utilizar o símbolo acento circunflexo, que 929 00:51:31,320 --> 00:51:36,210 cando estamos escribindo o poder, nós normalmente usar pouco acento circunflexo 4 5 ou algo 930 00:51:36,210 --> 00:51:40,560 así, só cando estamos Gchatting amigos ou calquera outra cousa. 931 00:51:40,560 --> 00:51:43,660 Pero, nese caso, que en realidade provocaría unha colisión. 932 00:51:43,660 --> 00:51:46,450 E así eu evitaba-lo só porque Pasou de eu saber, neste caso, 933 00:51:46,450 --> 00:51:50,430 que que causaría que a colisión. 934 00:51:50,430 --> 00:51:52,270 >> Todo ben. 935 00:51:52,270 --> 00:51:55,080 Agora, por desgraza, a os últimos sete minutos, 936 00:51:55,080 --> 00:51:57,410 Teño que manter vento súas mentes un pouco. 937 00:51:57,410 --> 00:52:00,230 Entón, permita-me amosar-lle algunhas outras cousas tamén. 938 00:52:00,230 --> 00:52:03,710 >> Nós mostramos-lle esta idea de tendo estas funcións anónimas, 939 00:52:03,710 --> 00:52:07,040 estes peches que permiten que tipo de pasar funcións arredor. 940 00:52:07,040 --> 00:52:08,100 Pode devolve-los. 941 00:52:08,100 --> 00:52:09,490 Vostede pode manipula-los. 942 00:52:09,490 --> 00:52:11,790 Pode facer todo tipo de cousas tolas. 943 00:52:11,790 --> 00:52:14,850 >> Pero outra cousa que pasa a ser útil 944 00:52:14,850 --> 00:52:19,740 é a posibilidade de, ao contrario para devolver esas funcións 945 00:52:19,740 --> 00:52:25,146 nunha función, para pasar unha función como un parámetro para outra función. 946 00:52:25,146 --> 00:52:30,430 Vostede pode estar pensando ben por que na Terra que eu ía querer facer algo así? 947 00:52:30,430 --> 00:52:33,660 >> Ben, digamos que quero tomar este operador que 948 00:52:33,660 --> 00:52:40,260 traballou tan duro para crear e aplicar Lo para unha morea de números diferentes 949 00:52:40,260 --> 00:52:41,770 nunha matriz. 950 00:52:41,770 --> 00:52:46,700 Polo tanto, neste caso eu teño unha matriz de integers-- 1, 4, 7, 2, 5, 10, 56. 951 00:52:46,700 --> 00:52:48,080 E quero dobrar todos eles. 952 00:52:48,080 --> 00:52:50,430 O xeito que faría normalmente facelo é só escribir 953 00:52:50,430 --> 00:52:53,440 un loop for simple que itera sobre todos eles 954 00:52:53,440 --> 00:52:57,140 e realizar algún tipo de operación cadrado sobre eles, 955 00:52:57,140 --> 00:53:02,700 introducir os novos valores nunha nova variable, ou mellor, unha nova matriz aquí. 956 00:53:02,700 --> 00:53:07,370 E o valor da saída de resultado é, a continuación, todas estas matrices, 957 00:53:07,370 --> 00:53:10,200 ou en vez de todos aqueles elementos agora ao cadrado. 958 00:53:10,200 --> 00:53:12,680 >> E poderíamos facer o mesmo cubing cousa para el, 959 00:53:12,680 --> 00:53:15,360 pero unha pequena campá de alarma debe ir off 960 00:53:15,360 --> 00:53:17,360 dicindo que quizais haxa dalgún xeito que fariamos 961 00:53:17,360 --> 00:53:19,860 poder simplificar isto un pouco. 962 00:53:19,860 --> 00:53:21,130 E en realidade non existe. 963 00:53:21,130 --> 00:53:25,320 E se puidésemos crear unha función que nos permite 964 00:53:25,320 --> 00:53:28,350 a aceptar, como un predador, unha función? 965 00:53:28,350 --> 00:53:30,350 Polo tanto, neste caso, tomar unha ollar para estes argumentos. 966 00:53:30,350 --> 00:53:33,220 Estamos indo para aceptar unha lista de dobres. 967 00:53:33,220 --> 00:53:35,030 E entón nós imos a aceptar unha función 968 00:53:35,030 --> 00:53:40,990 nunha variable chamada F que para tomar unha parella e voltar un dobre. 969 00:53:40,990 --> 00:53:43,320 E toda a produción desta función enteira 970 00:53:43,320 --> 00:53:47,310 chamado mapeador vai voltar un array chamado dobre. 971 00:53:47,310 --> 00:53:52,380 >> O que isto sería, entón permítame facer é iterado sobre esta lista 972 00:53:52,380 --> 00:53:56,350 e facer o mesmo, pero agora aplicar esta función en cada 973 00:53:56,350 --> 00:53:58,970 dos valores individuais na lista. 974 00:53:58,970 --> 00:54:00,750 Entón, realmente non sei o que é f. 975 00:54:00,750 --> 00:54:02,010 Non importa para min. 976 00:54:02,010 --> 00:54:06,530 Pero desde que ten en parella, realizar algunha operación sobre el, 977 00:54:06,530 --> 00:54:08,640 e, a continuación, retorna unha Dobre, eu sería, entón, 978 00:54:08,640 --> 00:54:13,415 capaz de localizar nun mapa esa función a través cada elemento da lista. 979 00:54:13,415 --> 00:54:16,270 980 00:54:16,270 --> 00:54:20,930 >> E este tipo de programación é chamadas funcións de orde superior, 981 00:54:20,930 --> 00:54:24,440 onde estamos pasando funcións en torno a como parámetros 982 00:54:24,440 --> 00:54:26,430 e facer as cousas con funcións. 983 00:54:26,430 --> 00:54:29,640 É unha especie de como tomar todos estes ideas que aprendemos en CS50 984 00:54:29,640 --> 00:54:31,390 e levalos especie do para o nivel seguinte. 985 00:54:31,390 --> 00:54:34,140 E iso é todo cousa estilo CS51. 986 00:54:34,140 --> 00:54:37,080 E así imos en profundidade máis nas clases como esta. 987 00:54:37,080 --> 00:54:38,930 >> Pero esta é tamén importante aquí, porque 988 00:54:38,930 --> 00:54:42,010 ver unha chea de funcións que se utilizan en Swift 989 00:54:42,010 --> 00:54:45,590 que fai esencialmente este, onde temos 990 00:54:45,590 --> 00:54:48,300 algúns números, algúns matriz de números. 991 00:54:48,300 --> 00:54:50,850 Nós imos pasar iso matriz na nosa mapeador. 992 00:54:50,850 --> 00:54:55,770 E nós tamén imos pasar algunha función, que 993 00:54:55,770 --> 00:54:57,950 nós xa definido aquí enriba. 994 00:54:57,950 --> 00:54:59,690 Será cadrado. 995 00:54:59,690 --> 00:55:02,220 E nós estamos indo, a continuación, cuadratura todos estes números 996 00:55:02,220 --> 00:55:04,710 e almacenar tanto en este resultado aquí. 997 00:55:04,710 --> 00:55:07,280 998 00:55:07,280 --> 00:55:11,000 >> Entón, neste caso, definimos a nosa propia función chamada mapeador. 999 00:55:11,000 --> 00:55:15,370 Pero esa cousa exacta é, De feito, construído en Swift. 1000 00:55:15,370 --> 00:55:18,960 Hai unha variedade de funcións chamado mapa. 1001 00:55:18,960 --> 00:55:21,520 Hai unha función de mapa, hai unha función de reducir, 1002 00:55:21,520 --> 00:55:25,630 e hai unha función de filtro, que se aplican esencialmente funcións 1003 00:55:25,630 --> 00:55:30,782 para cada elemento nun lista para modificalo los de algunha maneira. 1004 00:55:30,782 --> 00:55:34,510 >> Audiencia: Entón, xa que está transformando os datos a outro formato 1005 00:55:34,510 --> 00:55:36,134 a través dun function-- 1006 00:55:36,134 --> 00:55:37,050 DAN Armendáriz: Correcto. 1007 00:55:37,050 --> 00:55:39,420 É, polo tanto, a función que estamos aceptando 1008 00:55:39,420 --> 00:55:41,790 está transformando os datos de algunha maneira. 1009 00:55:41,790 --> 00:55:44,700 Neste caso, ambos nós cuadratura-lo, ou que foron cubing-lo, 1010 00:55:44,700 --> 00:55:50,060 ou realmente, poderiamos realizar ningunha operación sobre el en todo. 1011 00:55:50,060 --> 00:55:54,150 >> Pero deixe-me amosar-lle entón como este vai mirar na práctica. 1012 00:55:54,150 --> 00:55:56,681 E de novo, eu estou correndo un pouco de tempo. entón eu non teño 1013 00:55:56,681 --> 00:55:59,430 vai ser capaz de pasar por riba de todo do código fonte aquí en detalle. 1014 00:55:59,430 --> 00:56:00,721 Pero eu encouraged-lo a facelo. 1015 00:56:00,721 --> 00:56:03,850 Imos publicar-la o máis axiña posible despois esa conversa. 1016 00:56:03,850 --> 00:56:07,610 >> Pero se der un ollo niso, asumir que temos unha lista de números, 1017 00:56:07,610 --> 00:56:10,260 unha matriz de números nesta números chamados variables. 1018 00:56:10,260 --> 00:56:16,670 Entón eu quero facer este operación do filtro sobre estes números. 1019 00:56:16,670 --> 00:56:19,730 Así, é un filtro maior función para que 1020 00:56:19,730 --> 00:56:24,660 acepta unha matriz e tamén unha función. 1021 00:56:24,660 --> 00:56:28,760 E en que cada elemento array, el executa esta función. 1022 00:56:28,760 --> 00:56:31,990 >> Se esta función devolve verdade, el mantén ese elemento. 1023 00:56:31,990 --> 00:56:36,100 Se esta función devolve falso, xoga fóra ese elemento. 1024 00:56:36,100 --> 00:56:40,480 E, a continuación, el retorna unha lista que é entón constituída por todos 1025 00:56:40,480 --> 00:56:44,360 destes elementos que foron filtradas. 1026 00:56:44,360 --> 00:56:47,150 >> Polo tanto, noutras palabras, que é a mesma idea, o libro de notas. 1027 00:56:47,150 --> 00:56:50,800 Podemos ter unha variedade de clases a este valor os números de chamada. 1028 00:56:50,800 --> 00:56:55,590 Podería ser 100, e 70, e 40, así por diante e así por diante. 1029 00:56:55,590 --> 00:56:59,110 Que este filtro fai é aviso que se trata de que o azucre sintático 1030 00:56:59,110 --> 00:57:01,310 para unha función anónima. 1031 00:57:01,310 --> 00:57:05,980 Esta é unha función anónima dicindo que o parámetro que estou aceptando 1032 00:57:05,980 --> 00:57:09,690 será, se é superior a 70, 1033 00:57:09,690 --> 00:57:15,837 entón iso pode voltar true, o que significa que produto que vai ser sometido neste filtro. 1034 00:57:15,837 --> 00:57:17,920 Entón, imos ser un pouco máis concreto sobre iso. 1035 00:57:17,920 --> 00:57:25,760 Se eu teño esa matriz de números e consiste en 100, 70 e 40, 1036 00:57:25,760 --> 00:57:29,730 Eu executar este filtro operación en cada un destes. 1037 00:57:29,730 --> 00:57:33,270 Así que este é un primeiro valor de 100. 1038 00:57:33,270 --> 00:57:36,770 100 maior ou igual 70 é verdade, que 1039 00:57:36,770 --> 00:57:41,950 significa que 100 é mantido en esta nova copia desta matriz. 1040 00:57:41,950 --> 00:57:44,290 70 tamén pasa. 1041 00:57:44,290 --> 00:57:46,020 Pero 40 non. 1042 00:57:46,020 --> 00:57:54,290 Entón, o que é devolto en passingCount é a matriz de elementos 100 e 70-- 1043 00:57:54,290 --> 00:57:57,410 100, coma, 70. 1044 00:57:57,410 --> 00:57:59,870 Aqueles foron os dous únicos elementos que foron mantidos. 1045 00:57:59,870 --> 00:58:03,740 E así a razón de eu rapidamente pasou por unha morea de este tipo de orde alta 1046 00:58:03,740 --> 00:58:08,680 as cousas son, porque iso é tan común cousa que vai ver en Swift fermosa 1047 00:58:08,680 --> 00:58:16,810 a miúdo, está realizando algunha operación usando esta sintaxe función anónima. 1048 00:58:16,810 --> 00:58:18,450 >> Hai algunhas cousas interesantes. 1049 00:58:18,450 --> 00:58:24,730 Os switches son realmente poderoso en Swift, Quero dicir só como un tolo, tolo poderoso. 1050 00:58:24,730 --> 00:58:28,250 Podes usar a chave, e realmente pode aplicala las 1051 00:58:28,250 --> 00:58:33,160 a intervalos, o que é medio tolo, e facer cousas extravagantes como iso. 1052 00:58:33,160 --> 00:58:37,540 >> Pero nos últimos minutos, Quero saltar moi lonxe 1053 00:58:37,540 --> 00:58:46,940 e amosar-lle un exemplo concreto de como podemos crear en iOS app empregando Swift. 1054 00:58:46,940 --> 00:58:49,040 Entón, cando está facendo iso, vai ter que tomar 1055 00:58:49,040 --> 00:58:51,990 unha mirada sobre at-- Apple documentación, eles 1056 00:58:51,990 --> 00:58:56,084 ten unha morea de realmente bos tutoriais para crear a súa primeira aplicación. 1057 00:58:56,084 --> 00:58:58,250 E eu encorajo a facer iso porque levalo 1058 00:58:58,250 --> 00:59:04,110 a través de todos os pasos que exactamente á prema en crear unha aplicación iOS. 1059 00:59:04,110 --> 00:59:07,290 >> Pero aquí temos esta app IOS. 1060 00:59:07,290 --> 00:59:10,960 E é un app realmente moi simple. 1061 00:59:10,960 --> 00:59:13,840 Se eu executar tanto, deixe-me amosar é o que parece. 1062 00:59:13,840 --> 00:59:19,480 Todo o que esencialmente fai é tira desde a Internet un arquivo JSON 1063 00:59:19,480 --> 00:59:22,300 que teña almacenado nun servidor. 1064 00:59:22,300 --> 00:59:26,310 E o ficheiro JSON define imaxes que permiten 1065 00:59:26,310 --> 00:59:31,680 me para entón percorrer, na miña app, imaxes do meu servidor web. 1066 00:59:31,680 --> 00:59:32,880 >> Entón, eu teño aquí getNextImage. 1067 00:59:32,880 --> 00:59:37,100 El leva unha imaxe a partir da Internet, e despois o exhibe na pantalla. 1068 00:59:37,100 --> 00:59:38,200 >> Polo que é moi sinxelo. 1069 00:59:38,200 --> 00:59:41,550 Pero o obxectivo aquí é amosar como podemos combinar as cousas 1070 00:59:41,550 --> 00:59:47,820 Deste último semanas de CS50 nunha aplicación real IOS. 1071 00:59:47,820 --> 00:59:53,140 Noutras palabras, se cadra unha das cousas que vai querer facer 1072 00:59:53,140 --> 00:59:56,340 é ter unha aplicación iOS que pode extraer datos a partir da Internet 1073 00:59:56,340 --> 00:59:59,070 e amosar ó usuario unha información. 1074 00:59:59,070 --> 01:00:03,130 Isto é totalmente o punto deste código fonte aquí. 1075 01:00:03,130 --> 01:00:07,890 >> Polo tanto, hai moito que dicir sobre como facer desenvolvemento real IOS. 1076 01:00:07,890 --> 01:00:12,860 Hai unha morea de sintaxe tolo que non vimos moito aínda 1077 01:00:12,860 --> 01:00:15,580 como unha clase, unha clase que realmente é. 1078 01:00:15,580 --> 01:00:19,470 Podemos ignorar en gran parte que, polo de agora. 1079 01:00:19,470 --> 01:00:23,250 >> Pero teña en conta que contiveran neste unha variedade de cousas 1080 01:00:23,250 --> 01:00:27,720 que xa vimos como funcións que teñen nomes específicos. 1081 01:00:27,720 --> 01:00:32,650 E cando damos aqueles Funciona os nomes correctos 1082 01:00:32,650 --> 01:00:36,530 que son esperamos polo IOS, de feito isto parece un pouco máxico. 1083 01:00:36,530 --> 01:00:40,300 Pero cando se crea un aplicación IOS, hai 1084 01:00:40,300 --> 01:00:47,590 son os nomes das funcións específicas que son chamados polo propio teléfono 1085 01:00:47,590 --> 01:00:52,440 como a aplicación está cargando para intentar para crear o proceso que efectivamente 1086 01:00:52,440 --> 01:00:54,787 executa a aplicación. 1087 01:00:54,787 --> 01:00:58,120 Entón, de novo, hai unha morea de cousas que eu ten que pasar por riba aquí para que 1088 01:00:58,120 --> 01:01:00,570 para falar sobre iso especificamente. 1089 01:01:00,570 --> 01:01:06,050 Pero eu encorajo-vos a buscar quizais outro seminario iOS, pero tamén algúns 1090 01:01:06,050 --> 01:01:09,290 do tutoriais en liña que facer un traballo moito mellor de describir 1091 01:01:09,290 --> 01:01:11,030 a información específica. 1092 01:01:11,030 --> 01:01:15,760 >> Pero podemos ver un par de cousas que son interesantes a partir do código aquí. 1093 01:01:15,760 --> 01:01:17,950 Teña en conta que temos que declaracións. 1094 01:01:17,950 --> 01:01:20,400 By the way, un importante cousa sobre as declaracións 1095 01:01:20,400 --> 01:01:24,860 é que os parénteses arredor da Expresión booleana son opcionais. 1096 01:01:24,860 --> 01:01:30,800 Pero as claves non son opcionais, non importa o quão poucas ou moitas liñas de código 1097 01:01:30,800 --> 01:01:32,360 tes nunha instrución if. 1098 01:01:32,360 --> 01:01:38,670 Non podes ter un if sen chaves en Swift. 1099 01:01:38,670 --> 01:01:41,000 >> E este é, así, unha especie de parvo. 1100 01:01:41,000 --> 01:01:43,910 Pero hai razóns históricas para iso. 1101 01:01:43,910 --> 01:01:46,180 É suposto salvalo de si mesmo. 1102 01:01:46,180 --> 01:01:49,899 Lle gusta a por exemplo, non pode eliminar as chaves en torno a que 1103 01:01:49,899 --> 01:01:50,440 if. 1104 01:01:50,440 --> 01:01:52,730 Aqueles son en realidade necesaria. 1105 01:01:52,730 --> 01:01:54,480 Entón, eu encouraged-lo a bótalle un ollo niso. 1106 01:01:54,480 --> 01:01:56,230 Pero hai unha construír o que quero 1107 01:01:56,230 --> 01:02:02,640 para amosar-lle que sobre Swift é nova para Swift 2.0 comparación 1108 01:02:02,640 --> 01:02:08,460 para versións anteriores de Swift, que é o seguinte. 1109 01:02:08,460 --> 01:02:11,620 A ver onde é que eu poñelas aquí? 1110 01:02:11,620 --> 01:02:16,630 >> Polo tanto, nesta función chamada fetchJSON, esta función 1111 01:02:16,630 --> 01:02:23,450 é responsable de tirar que JSON ficheiro dunha URL, o que só ocorre 1112 01:02:23,450 --> 01:02:26,310 estar en execución no meu CS50 IDE. 1113 01:02:26,310 --> 01:02:28,580 Eu só comecei a Apache, poñer meu arquivo JSON alí, 1114 01:02:28,580 --> 01:02:32,110 e eu son capaz de tire que datos de internet usando 1115 01:02:32,110 --> 01:02:36,430 esta función e este URL, que é fornecido polo teléfono. 1116 01:02:36,430 --> 01:02:40,490 É indicado por un biblioteca que usa cando 1117 01:02:40,490 --> 01:02:43,140 está facendo algún desenvolvemento app IOS. 1118 01:02:43,140 --> 01:02:49,690 >> Nótese aquí que hai esta inusual construción sintáctica chamado garda. 1119 01:02:49,690 --> 01:02:53,530 E realmente todo isto está Swift é unha forma de comprobar 1120 01:02:53,530 --> 01:02:56,870 que algunhas cousas teñen foron atendidos antes que 1121 01:02:56,870 --> 01:03:00,000 continuar co resto da función. 1122 01:03:00,000 --> 01:03:04,260 Entón, eu podería ter, usando este tipo opcional, 1123 01:03:04,260 --> 01:03:10,530 Podería ter atopado o URL por de realizar esta función NSURL 1124 01:03:10,530 --> 01:03:16,640 e almacenar tanto nunha URL constante, e, a continuación, comprobar 1125 01:03:16,640 --> 01:03:20,820 URL para ver se era nula, porque ía voltar un tipo opcional. 1126 01:03:20,820 --> 01:03:25,660 E se fose nula, entón eu ía imprimir un erro e despois volver. 1127 01:03:25,660 --> 01:03:29,970 >> Pero en vez diso, o que permite que garda nós facemos é que moi cousa, 1128 01:03:29,970 --> 01:03:34,550 pero garantir que é realmente o caso que url 1129 01:03:34,550 --> 01:03:38,020 foi debidamente definido polo NSURL. 1130 01:03:38,020 --> 01:03:41,810 E se é, entón salta sobre iso, e 1131 01:03:41,810 --> 01:03:46,110 permítelle avanzar url sendo adecuadamente definidas. 1132 01:03:46,110 --> 01:03:48,830 Pero, de ser o caso de que url non está debidamente definido, 1133 01:03:48,830 --> 01:03:52,550 se esta función devolve un erro ou algunha outra cousa inesperada 1134 01:03:52,550 --> 01:03:58,030 de feito, ocorre, este construto garda permítenos entón a saída que o erro 1135 01:03:58,030 --> 01:04:00,390 e voltar inmediatamente. 1136 01:04:00,390 --> 01:04:00,890 Si? 1137 01:04:00,890 --> 01:04:04,839 >> Audiencia: Entón é tipo de como se entón máis? 1138 01:04:04,839 --> 01:04:07,130 DAN Armendáriz: É unha especie de como un entón máis, si, 1139 01:04:07,130 --> 01:04:14,200 agás que esta url é, entón, establecido para todo isto a continuación. 1140 01:04:14,200 --> 01:04:20,420 Se pasar pola garda, el será efectivamente Explique datos 1141 01:04:20,420 --> 01:04:29,500 e empregar no resto código fonte na súa función. 1142 01:04:29,500 --> 01:04:33,790 Entón, eu sospeito que vai comezar a ver este garda tamén. 1143 01:04:33,790 --> 01:04:36,670 E estar atento a iso. 1144 01:04:36,670 --> 01:04:46,270 >> Entón, só tes que ollar para un par de outro cousas, iso aquí é o que, 1145 01:04:46,270 --> 01:04:53,377 pensas que, só en base ao que que estaban falando antes? 1146 01:04:53,377 --> 01:04:56,650 >> Audiencia: Creo que vai executar na lista? 1147 01:04:56,650 --> 01:04:59,100 >> DAN Armendáriz: Así que é preto. 1148 01:04:59,100 --> 01:05:02,360 Esta é unha función que estamos definindo. 1149 01:05:02,360 --> 01:05:07,240 E nós estamos introducindo esa función como un argumento para esta función aquí. 1150 01:05:07,240 --> 01:05:09,120 >> Audiencia: [inaudível], se non nulo. 1151 01:05:09,120 --> 01:05:11,470 Polo tanto, é na lista, non? 1152 01:05:11,470 --> 01:05:15,450 >> DAN Armendáriz: O erro non é nulo, de xeito que é-- entón eu teño que percorrer. 1153 01:05:15,450 --> 01:05:18,060 Ben, imos ver, eu realmente non podo rolar para a dereita aquí. 1154 01:05:18,060 --> 01:05:23,161 erro é un argumento que está a ser pasado para esta función anónima. 1155 01:05:23,161 --> 01:05:24,410 Esta é unha función anónima. 1156 01:05:24,410 --> 01:05:25,480 Non ten nome. 1157 01:05:25,480 --> 01:05:29,850 Pero estamos aceptando estes tres argumentos, datos, resposta, e erro. 1158 01:05:29,850 --> 01:05:33,590 E vai a voltar void, entón non vai voltar nada. 1159 01:05:33,590 --> 01:05:37,910 E este é o contido desa función. 1160 01:05:37,910 --> 01:05:41,961 E entón temos acceso ao interior que función de cada un destes argumentos. 1161 01:05:41,961 --> 01:05:45,650 1162 01:05:45,650 --> 01:05:48,679 >> Polo tanto, é un turbillón excursión da lingua. 1163 01:05:48,679 --> 01:05:50,470 Pero eu espero que con iso, espero que tomar 1164 01:05:50,470 --> 01:05:54,490 un ollo a algúns dos tutoriais específico para o desenvolvemento IOS con Swift, 1165 01:05:54,490 --> 01:05:57,481 especialmente se vai a Programador web página-- de Apple 1166 01:05:57,481 --> 01:05:59,980 eles teñen unha morea de realmente bo tutoriais para comezar. 1167 01:05:59,980 --> 01:06:05,010 Pero espero que nesta hora de falar sobre a sintaxe en si deu 1168 01:06:05,010 --> 01:06:08,760 vostede o suficiente para comezar con isto. 1169 01:06:08,760 --> 01:06:12,950 >> Imos publicar todo isto fonte código na páxina web do seminario 1170 01:06:12,950 --> 01:06:17,800 canto antes, e tamén as láminas así que ten unha referencia para todos aqueles. 1171 01:06:17,800 --> 01:06:20,530 Pero boa sorte cos seus proxectos. 1172 01:06:20,530 --> 01:06:23,640 E grazas a todos moi por vir. 1173 01:06:23,640 --> 01:06:26,990 >> [Aplausos] 1174 01:06:26,990 --> 01:06:28,026