1 00:00:00,000 --> 00:00:03,332 >> [Jouer de la musique] 2 00:00:03,332 --> 00:00:06,200 3 00:00:06,200 --> 00:00:09,590 >> DAN AMRMENDARIZ: Tout le monde, accueillir le séminaire de CS50, 4 00:00:09,590 --> 00:00:11,690 iOS App développement avec Swift. 5 00:00:11,690 --> 00:00:15,690 Je suis Dan Armendariz, et je suis un précepteur de l'informatique ici à Harvard. 6 00:00:15,690 --> 00:00:21,510 >> Et la prochaine heure va être une visite éclair de autant trucs 7 00:00:21,510 --> 00:00:25,160 sur ce sujet que nous pouvons adapter. 8 00:00:25,160 --> 00:00:29,170 Je vais poster la totalité du code source que vous verrez aujourd'hui en ligne. 9 00:00:29,170 --> 00:00:31,990 Nous pourrions ne pas être en mesure de effectivement aller sur tout 10 00:00:31,990 --> 00:00:34,810 que je suis ce que je suis vous montrant en cette heure. 11 00:00:34,810 --> 00:00:37,580 Mais au moins, je l'espère grâce les commentaires du code source, 12 00:00:37,580 --> 00:00:40,830 vous serez en mesure d'essayer de comprendre ce qui qui se passe exactement pour ces choses 13 00:00:40,830 --> 00:00:42,950 que nous ne recevons pas assez. 14 00:00:42,950 --> 00:00:46,970 >> Dans l'ensemble, la structure de La discussion d'aujourd'hui sera comme suit. 15 00:00:46,970 --> 00:00:52,820 Nous allons commencer à faire un peu de base syntaxe de la langue Swift, 16 00:00:52,820 --> 00:00:56,290 entrer dans une partie de la plus avancée syntaxe du langage Swift. 17 00:00:56,290 --> 00:00:59,560 Parce que la langue est très moderne et il 18 00:00:59,560 --> 00:01:02,110 a beaucoup de haut niveau caractéristiques, choses que nous avons pas 19 00:01:02,110 --> 00:01:06,600 vu en C tout au long de CS50, ou Même certains des autres langues 20 00:01:06,600 --> 00:01:09,310 que nous avons commencé en utilisant dans CS50 comme PHP, 21 00:01:09,310 --> 00:01:12,670 donc je vais devoir essayer de introduisent également certains sujets qui 22 00:01:12,670 --> 00:01:18,580 sont liés à la hausse des langages de haut niveau que vous ne pouvez pas voir en profondeur dans CS50, 23 00:01:18,580 --> 00:01:21,380 mais vous verrez plus tard cours d'informatique. 24 00:01:21,380 --> 00:01:25,290 Donc, ça va être un serrés heures. 25 00:01:25,290 --> 00:01:28,897 Et s'il vous plaît sentir libre de me laisser savoir si vous avez des questions. 26 00:01:28,897 --> 00:01:30,730 Donc, si vous êtes intéressé à faire du développement 27 00:01:30,730 --> 00:01:34,442 avec Swift, ou vraiment tout développement d'application iOS, 28 00:01:34,442 --> 00:01:35,900 il ya un couple d'exigences. 29 00:01:35,900 --> 00:01:39,940 Tout d'abord, vous devez être à l'aide un Mac, en cours d'exécution dans les exemples 30 00:01:39,940 --> 00:01:43,880 que nous allons utiliser aujourd'hui, relativement nouvelle version de l'OS 31 00:01:43,880 --> 00:01:46,580 X. Dans ce cas, je suis X 10.5 courir. 32 00:01:46,580 --> 00:01:48,600 Vous pouvez exécuter 10.11 si vous voulez. 33 00:01:48,600 --> 00:01:52,430 Mais tout ce que vous allez voir impliquant Xcode est 7 et plus tard, 34 00:01:52,430 --> 00:01:56,271 qui présente la dernière version de Swift, qui est Swift 2.0. 35 00:01:56,271 --> 00:01:58,270 Ceci est en fait une jolie distinction importante. 36 00:01:58,270 --> 00:02:01,510 A beaucoup de la syntaxe a changé assez significativement 37 00:02:01,510 --> 00:02:05,890 dans certains cas, de Swift 1.0, qui a été publié l'année dernière, 38 00:02:05,890 --> 00:02:08,514 Swift à 2,0, ce qui vient de sortir cet automne. 39 00:02:08,514 --> 00:02:09,889 Donc, nous allons montrer Swift 2.0. 40 00:02:09,889 --> 00:02:13,020 Un grand nombre des choses qui vous recherchez en ligne 41 00:02:13,020 --> 00:02:18,040 lorsque vous essayez d'obtenir supplémentaires informations sur une variété de choses, 42 00:02:18,040 --> 00:02:20,710 vous pouvez explicitement rechercher Swift 2 43 00:02:20,710 --> 00:02:24,950 plutôt que de tout simplement vieux Swift à faire assurer que vous obtenez la syntaxe correcte. 44 00:02:24,950 --> 00:02:26,920 >> En fait, cela est généralement vrai. 45 00:02:26,920 --> 00:02:31,210 Il ya une quantité de développement rapide passe dans la langue Swift 46 00:02:31,210 --> 00:02:35,110 depuis Apple a publié, je pense ce qui, il a été un peu plus d'un an 47 00:02:35,110 --> 00:02:36,370 en ce moment. 48 00:02:36,370 --> 00:02:39,080 Et les choses ont changé de façon spectaculaire en ce moment. 49 00:02:39,080 --> 00:02:42,160 Et il ne faut pas être frustré si, lorsque vous êtes à la recherche autour de 50 00:02:42,160 --> 00:02:48,310 pour les sujets Swift ou la façon d'accomplir quelque chose en utilisant quelques exemples de code 51 00:02:48,310 --> 00:02:51,210 ou quelque chose qu'il ne travailler réellement sur Swift 2.0. 52 00:02:51,210 --> 00:02:53,790 Assurez-vous que vous êtes à la recherche spécifiquement pour cette version 53 00:02:53,790 --> 00:02:58,690 pour essayer de minimiser les effets de différents versions et ces sortes de choses. 54 00:02:58,690 --> 00:03:02,470 >> Je vais essayer de souligner juste quelques choses qui sont différents aux anciennes versions. 55 00:03:02,470 --> 00:03:03,970 Mais il est quelque chose à surveiller. 56 00:03:03,970 --> 00:03:06,770 Cela va probablement être un des plus grands maux de tête 57 00:03:06,770 --> 00:03:11,010 que vous aurez avec SWIFT est de trouver exemple de code qui est plus âgé, même juste 58 00:03:11,010 --> 00:03:14,050 de quelques mois, en essayant d'utiliser dans votre projet plus moderne. 59 00:03:14,050 --> 00:03:15,430 Et ce tout simplement ne fonctionne pas. 60 00:03:15,430 --> 00:03:18,530 Vous obtenez des erreurs de compilation, de la syntaxe les erreurs, toutes sortes de trucs dingues. 61 00:03:18,530 --> 00:03:21,580 Il suffit donc d'être patient avec cela, et nous espérons, 62 00:03:21,580 --> 00:03:24,200 avoir une assez bonne expérience avec l'ensemble Swift. 63 00:03:24,200 --> 00:03:28,430 >> Maintenant, vous pouvez réellement join-- et je l'espère nous avons toujours cette réalité cette année-- 64 00:03:28,430 --> 00:03:30,910 CS 50 d'application d'Apple équipe de développement, qui 65 00:03:30,910 --> 00:03:34,680 vous permettra d'installer des applications que vous créez sur vos appareils iOS. 66 00:03:34,680 --> 00:03:39,190 Alors jetez un oeil à cette adresse URL si vous êtes intéressé à le faire. 67 00:03:39,190 --> 00:03:41,450 >> Donc, juste un couple de choses à propos de lui-même. Swift 68 00:03:41,450 --> 00:03:43,580 Il est un langage compilé. 69 00:03:43,580 --> 00:03:45,870 Mais vous verrez que certains des caractéristiques que nous utilisons 70 00:03:45,870 --> 00:03:50,650 lui permettent d'être utilisé aussi dans un peu interprété comme une façon aussi. 71 00:03:50,650 --> 00:03:56,350 >> A beaucoup de la syntaxe est empruntée de C. Il est basé et écrit en C. 72 00:03:56,350 --> 00:04:00,400 Et donc nous allons voir que il ya beaucoup de plats à emporter 73 00:04:00,400 --> 00:04:04,450 à partir de vos connaissances de C que nous pouvons port à Swift. 74 00:04:04,450 --> 00:04:07,290 >> Mais il ya des choses qui rendre très différente de C. 75 00:04:07,290 --> 00:04:08,860 Il est très fortement typé. 76 00:04:08,860 --> 00:04:10,380 Il ya la gestion automatique de la mémoire. 77 00:04:10,380 --> 00:04:13,170 Tu ne vas pas avoir à utiliser malloc ou n'importe où gratuitement. 78 00:04:13,170 --> 00:04:15,110 Il est conçu pour généralité. 79 00:04:15,110 --> 00:04:19,480 Donc, en d'autres termes, vous pouvez l'utiliser dans toutes sortes de contextes, de Apple Suivre 80 00:04:19,480 --> 00:04:26,290 à l'iPhone tout le chemin jusqu'à OS X, et même certains serveurs, même certains scripts. 81 00:04:26,290 --> 00:04:28,400 Mais nous verrons que le support pour les scripts 82 00:04:28,400 --> 00:04:31,360 est pas encore là que il est dans d'autres langues. 83 00:04:31,360 --> 00:04:34,930 Donc plus probable que vous serez à l'aide ce exclusivement pour le développement 84 00:04:34,930 --> 00:04:37,060 sur votre Mac ou votre iPhone. 85 00:04:37,060 --> 00:04:40,150 >> Et il a beaucoup de caractéristiques modernes. 86 00:04:40,150 --> 00:04:43,380 Et beaucoup de ces choses sont des choses qui nous allons essayer de répondre aujourd'hui, 87 00:04:43,380 --> 00:04:47,590 mais aussi nos sujets que franchement, nous pouvons consacrer des cours entiers. 88 00:04:47,590 --> 00:04:50,140 En fait, CS 51, qui est prochain semestre offert, 89 00:04:50,140 --> 00:04:53,990 se concentre beaucoup sur ces sujets qui sont décrits ci-dessous. 90 00:04:53,990 --> 00:04:56,781 Ainsi, vous pouvez passer un semestre entier comprendre ces choses. 91 00:04:56,781 --> 00:04:58,530 Mais nous allons essayer pour obtenir à travers eux 92 00:04:58,530 --> 00:05:00,800 au moins assez que vous peut comprendre ce qui est 93 00:05:00,800 --> 00:05:03,700 passe quand vous regardez à un programme Swift 94 00:05:03,700 --> 00:05:07,310 et être en mesure de pirater votre chemin à travers elle pour le projet final. 95 00:05:07,310 --> 00:05:10,780 >> Maintenant, l'une des meilleures façons que vous pouvez obtenir des informations supplémentaires sur ce 96 00:05:10,780 --> 00:05:14,700 est franchement juste par Apple fourni de la documentation de Swift. 97 00:05:14,700 --> 00:05:16,930 Il ya beaucoup d'API qui sont disponibles. 98 00:05:16,930 --> 00:05:21,170 Et cela est une bonne base de départ pour vous à chercher, des choses spécifiques que vous 99 00:05:21,170 --> 00:05:23,020 voulez faire avec une API impliquant iOS. 100 00:05:23,020 --> 00:05:26,350 Si vous voulez utiliser l'appareil photo pour exemple, vous pouvez commencer à chercher ici, 101 00:05:26,350 --> 00:05:32,540 et également utiliser Google et Stack Débordement comme vous le feriez normalement. 102 00:05:32,540 --> 00:05:36,670 >> Des questions sur cette avant de sauter à droite? 103 00:05:36,670 --> 00:05:37,880 D'accord. 104 00:05:37,880 --> 00:05:38,700 Passons. 105 00:05:38,700 --> 00:05:42,620 >> Alors d'abord, je dois une nombre de fichiers d'exemple. 106 00:05:42,620 --> 00:05:46,040 Et je vais essayer de l'étape à travers eux relativement rapidement. 107 00:05:46,040 --> 00:05:49,190 Ceci est le fichier Bonjour tout le monde pour Swift. 108 00:05:49,190 --> 00:05:51,050 C'est très simple. 109 00:05:51,050 --> 00:05:54,360 Il ya beaucoup plus de commentaires qu'il ya de code réel. 110 00:05:54,360 --> 00:05:57,100 Notez que le code réel est à en bas sur la ligne 14. 111 00:05:57,100 --> 00:05:57,980 Il dit impression. 112 00:05:57,980 --> 00:05:59,820 Et puis il est un appel de fonction. 113 00:05:59,820 --> 00:06:03,010 Nous passons dans une chaîne appelée Bonjour CS50. 114 00:06:03,010 --> 00:06:04,750 Notez qu'il n'y a pas de points-virgules. 115 00:06:04,750 --> 00:06:07,010 Notez qu'il n'y a aucun principale int. 116 00:06:07,010 --> 00:06:10,392 Il ya rien de la cochonneries que nous avons eu avec C. 117 00:06:10,392 --> 00:06:15,020 Lorsque nous utilisons Swift de cette manière, qui est simplement écrit dans un fichier texte 118 00:06:15,020 --> 00:06:18,340 et stockées sur mon ordinateur, puis Je peux le compiler et l'exécuter. 119 00:06:18,340 --> 00:06:20,920 >> Remarquez que je suis ici ne pas utiliser l'IDE CS50. 120 00:06:20,920 --> 00:06:24,460 Cela suppose que je suis la course et que je suis sur OS X, 121 00:06:24,460 --> 00:06:27,870 et que je l'ai déjà installé Xcode sur cette machine pour que cette 122 00:06:27,870 --> 00:06:29,080 en fait pour fonction. 123 00:06:29,080 --> 00:06:33,349 Mais cela est juste un fichier texte normal que nous puissions ensuite compiler et modifier. 124 00:06:33,349 --> 00:06:34,890 Donc, nous allons voir comment cela fonctionne réellement. 125 00:06:34,890 --> 00:06:37,430 Que faire si je veux compiler? 126 00:06:37,430 --> 00:06:40,450 1.swift swiftc. 127 00:06:40,450 --> 00:06:42,960 Après une minute ou deux, il verra que nous avons maintenant 128 00:06:42,960 --> 00:06:45,360 compilé ce dans un fichier appelé 1. 129 00:06:45,360 --> 00:06:51,090 Et maintenant, nous avons imprimé notre CS50, notre application Bonjour tout le monde, plutôt. 130 00:06:51,090 --> 00:06:54,690 >> Remarquez une autre chose que ainsi est que, par défaut, 131 00:06:54,690 --> 00:07:00,090 nous ne devons entrée a / n pour imprimer une nouvelle ligne. 132 00:07:00,090 --> 00:07:05,315 Par défaut, la fonction d'impression dans Swift va imprimer une nouvelle ligne pour vous. 133 00:07:05,315 --> 00:07:09,284 Vous pouvez passer d'une option supplémentaire paramètre pour lui dire de ne pas le faire. 134 00:07:09,284 --> 00:07:10,950 Mais Google pour plus d'informations à ce sujet. 135 00:07:10,950 --> 00:07:13,450 Par défaut, il fera la ligne d'impression. 136 00:07:13,450 --> 00:07:16,420 >> Très bien, alors passons puis à d'autres choses. 137 00:07:16,420 --> 00:07:18,620 Alors, comment pouvons-nous définir des variables effectivement? 138 00:07:18,620 --> 00:07:21,960 Nous pouvons le faire est à l'aide l'une des deux méthodes. 139 00:07:21,960 --> 00:07:26,122 Et celui que je tiens à vous dire à propos de la première est cette définition let. 140 00:07:26,122 --> 00:07:27,830 Et cela est important car effectivement 141 00:07:27,830 --> 00:07:30,240 ce que nous faisons est de définir une constante. 142 00:07:30,240 --> 00:07:34,010 Nous allons créer une variable, ou plutôt un appelé nom de la constante, 143 00:07:34,010 --> 00:07:38,200 fournir à elle dans certaines data-- ce cas, la chaîne Dan. 144 00:07:38,200 --> 00:07:40,630 Mais en utilisant cette let mot-clé, nous disons 145 00:07:40,630 --> 00:07:43,860 que cette variable-- ou constant-- nouveau appelé 146 00:07:43,860 --> 00:07:46,220 nom ne va jamais être changé. 147 00:07:46,220 --> 00:07:50,120 Ça va être immuable tout au long la durée du programme 148 00:07:50,120 --> 00:07:53,100 ou tout au long de la la durée de contexte 149 00:07:53,100 --> 00:07:55,390 que cette variable est disponible. 150 00:07:55,390 --> 00:08:00,096 >> Ceci est très important que lorsque vous avez des données qui ne sont pas 151 00:08:00,096 --> 00:08:02,970 va changer dans votre programme, et vous verrez une variété d'exemples 152 00:08:02,970 --> 00:08:06,790 quand nous voulons utiliser laissez contre l'autre syntaxe, 153 00:08:06,790 --> 00:08:11,040 il est important que vous utiliser let chaque fois que possible, car cette notifie 154 00:08:11,040 --> 00:08:13,740 la langue qu'il est ne va pas être changé, 155 00:08:13,740 --> 00:08:16,590 et il peut effectivement effectuer beaucoup d'optimisations 156 00:08:16,590 --> 00:08:19,560 pour améliorer la vitesse et la sécurité de votre programme. 157 00:08:19,560 --> 00:08:24,480 Et par la sécurité, je veux dire pas laissé il accident avec des erreurs folles 158 00:08:24,480 --> 00:08:27,910 que nous soyons habitué à voir en C. 159 00:08:27,910 --> 00:08:32,460 >> Ensuite, nous pouvons utiliser interpolation de chaîne pour encapsuler ce dans une chaîne. 160 00:08:32,460 --> 00:08:35,200 Donc, nous pouvons voir dans cette ligne d'impression, imprimer bonjour, 161 00:08:35,200 --> 00:08:38,950 puis en utilisant des barres obliques inverses parens ouvertes, puis le nom de ma variable, 162 00:08:38,950 --> 00:08:41,809 dans ce cas constante, fermer les parenthèses. 163 00:08:41,809 --> 00:08:46,400 Je essentiellement en mettant ensuite le contenu de cette variable appelée name 164 00:08:46,400 --> 00:08:50,240 l'intérieur de la chaîne, puis imprimer le résultat là-bas. 165 00:08:50,240 --> 00:08:54,070 >> Il ya un autre changement à ce fichier qui est ce que je dois, tout en haut, 166 00:08:54,070 --> 00:08:57,340 mettre dans une ligne de tralala, qui essentiellement spécifie simplement 167 00:08:57,340 --> 00:09:00,180 que je veux utiliser le Swift interprète, qui 168 00:09:00,180 --> 00:09:04,190 signifie que je ne dois plus compiler ce programme particulier. 169 00:09:04,190 --> 00:09:06,567 Je peux juste courir comme son propre script. 170 00:09:06,567 --> 00:09:09,400 Mais cela est, dans ce cas, derrière les scènes en cours de compilation, puis 171 00:09:09,400 --> 00:09:10,030 en cours d'exécution. 172 00:09:10,030 --> 00:09:13,540 Il est juste invisible pour nous. 173 00:09:13,540 --> 00:09:15,880 >> Très bien, alors passons. 174 00:09:15,880 --> 00:09:19,650 Donc, il ya un peu de tricherie qui vient de se passer avant. 175 00:09:19,650 --> 00:09:23,230 Je vous ai montré que je pourrait définir une constante. 176 00:09:23,230 --> 00:09:25,490 Et je pourrais fournir des données pour le faire. 177 00:09:25,490 --> 00:09:29,240 Mais dans ce cas, remarque que je ne l'ai pas effectivement spécifier le type de données 178 00:09:29,240 --> 00:09:29,820 c'est tout. 179 00:09:29,820 --> 00:09:32,780 Et cela est parce que le compilateur, SWIFT peut 180 00:09:32,780 --> 00:09:36,910 déduire le type de données juste, fondée sur les données que je mets dedans. 181 00:09:36,910 --> 00:09:41,760 Parce qu'il sait que par l'évaluation de cette la variable ici, ce droit de données 182 00:09:41,760 --> 00:09:43,370 ici, elle sait qu'elle est une chaîne. 183 00:09:43,370 --> 00:09:48,690 Et si ce nom est donc constante va être une chaîne aussi. 184 00:09:48,690 --> 00:09:52,730 >> Mais nous pouvons aussi être explicite sur le type qui est 185 00:09:52,730 --> 00:09:55,790 nous allons utiliser pour constantes ou des variables 186 00:09:55,790 --> 00:10:01,590 en utilisant cette syntaxe instead-- laissez nom colon chaîne est égale 187 00:10:01,590 --> 00:10:05,530 Dan, qui dans ce cas signifie que nous sommes va définir un nom appelé constante. 188 00:10:05,530 --> 00:10:07,150 Ça va être du type chaîne. 189 00:10:07,150 --> 00:10:10,550 Et la valeur va être Dan. 190 00:10:10,550 --> 00:10:12,550 Maintenant, l'autre manière que nous pouvons créer variables-- 191 00:10:12,550 --> 00:10:15,549 et ceux-ci sont des variables modifiables, qui signifie que nous sommes, en fait, allons 192 00:10:15,549 --> 00:10:19,670 de changer leur contenu parfois dans le contexte de la durée 193 00:10:19,670 --> 00:10:23,890 que cette variable est defined-- nous utiliser le mot-clé var au lieu de laisser faire. 194 00:10:23,890 --> 00:10:27,400 Mais encore une fois, par défaut, sauf si vous savez que vous devez manipuler ces données, 195 00:10:27,400 --> 00:10:30,510 essayer d'utiliser pour laisser des améliorations de performances. 196 00:10:30,510 --> 00:10:33,740 >> Dans ce cas, je peux alors spécifier le type de données 197 00:10:33,740 --> 00:10:37,650 que nous nous attendons à être à l'intérieur du cette nouvelle variable appelée étiquette. 198 00:10:37,650 --> 00:10:38,800 Ça va être une chaîne. 199 00:10:38,800 --> 00:10:43,030 Et nous allons ensuite concaténer deux chaînes ensemble, la chaîne bonjour, 200 00:10:43,030 --> 00:10:48,070 et la chaîne représentée par le variables, ou plutôt le nom de la constante. 201 00:10:48,070 --> 00:10:50,660 >> Donc, que ce soit agréable parce que ce est un peu comme dans PHP que nous 202 00:10:50,660 --> 00:10:52,250 avoir très facile concaténation de chaîne. 203 00:10:52,250 --> 00:10:56,350 Nous ne devons pas automatiquement utiliser toute sorte de gestion de la mémoire 204 00:10:56,350 --> 00:11:00,580 d'augmenter la taille et à faire toute sorte de choses drôles là. 205 00:11:00,580 --> 00:11:05,040 Cela fonctionne comme nous aurions fait attendre. 206 00:11:05,040 --> 00:11:09,370 >> Tous les droits, toutes les questions à ce sujet? 207 00:11:09,370 --> 00:11:12,520 >> Maintenant, l'autre raison que nous avons besoin de vous avez la possibilité 208 00:11:12,520 --> 00:11:15,490 pour être en mesure de définir ce que type de variables de données sont 209 00:11:15,490 --> 00:11:18,170 est parce que parfois nous ne faisons pas vouloir initialiser les variables 210 00:11:18,170 --> 00:11:21,080 avec quelques données au point de définition. 211 00:11:21,080 --> 00:11:23,500 Donc dans ce cas, disons que je veux commencer à entrer 212 00:11:23,500 --> 00:11:25,040 certains grades dans un carnet de notes. 213 00:11:25,040 --> 00:11:27,530 Eh bien, je sais que l'un des variables qui je veux être 214 00:11:27,530 --> 00:11:30,280 va être un grade mutable. 215 00:11:30,280 --> 00:11:33,010 Et nous savons aussi que nous veux que ce soit un entier. 216 00:11:33,010 --> 00:11:36,030 Mais peut-être que nous ne le faisons pas encore avoir cette qualité disponible. 217 00:11:36,030 --> 00:11:39,570 >> Dans Swift, vous devez définir le type de données 218 00:11:39,570 --> 00:11:44,000 qui est associé à un variable ou une constante laisser 219 00:11:44,000 --> 00:11:47,840 Avant de pouvoir utiliser cette variable. 220 00:11:47,840 --> 00:11:51,170 Parce qu'il est fortement typé, vous devez associer un type 221 00:11:51,170 --> 00:11:52,890 avec ces variables. 222 00:11:52,890 --> 00:11:56,120 >> Donc dans ce cas, si je ne l'ai pas correctement initialisé le premier avec une certaine valeur, 223 00:11:56,120 --> 00:12:00,520 alors je besoin de dire ce que Swift Je pense que le type de données soit. 224 00:12:00,520 --> 00:12:02,650 Et il va rester ce même type de données 225 00:12:02,650 --> 00:12:05,780 tout au long de l'histoire de ce programme. 226 00:12:05,780 --> 00:12:10,050 >> Maintenant, vous pourriez être tenté dès que Je l'ai créé cette variable de qualité 227 00:12:10,050 --> 00:12:13,530 et à condition qu'elle un entier de 100, maintenant, si je 228 00:12:13,530 --> 00:12:18,540 vouloir essayer de concaténer une chaîne avec cet entier, 229 00:12:18,540 --> 00:12:21,610 pourraient être tentés de continuer à utiliser cet opérateur de concaténation 230 00:12:21,610 --> 00:12:24,500 comme nous l'avons fait à quelques lignes avant. 231 00:12:24,500 --> 00:12:26,460 Mais malheureusement, Ce sera effectivement pas 232 00:12:26,460 --> 00:12:29,270 travailler, parce que vous êtes essentiellement l'exécution 233 00:12:29,270 --> 00:12:32,380 une opération sur deux types différents. 234 00:12:32,380 --> 00:12:36,856 >> Maintenant, ce qui est très différent des autres langages comme PHP qui sont vraiment 235 00:12:36,856 --> 00:12:38,480 goosey loosey avec leur genre de types. 236 00:12:38,480 --> 00:12:40,030 Ils sont comme, ouais, que ce soit, je ne me soucie pas. 237 00:12:40,030 --> 00:12:42,710 Donnez-moi juste un type, et peut-être que je vais faire la bonne chose. 238 00:12:42,710 --> 00:12:46,060 >> Dans ce cas, Swift est très strict sur les types 239 00:12:46,060 --> 00:12:47,350 que vous faites affaire avec. 240 00:12:47,350 --> 00:12:50,700 Cet opérateur de sommation ou l'opérateur de concaténation 241 00:12:50,700 --> 00:12:54,400 a essentiellement un couple de différentes options possibles. 242 00:12:54,400 --> 00:12:56,970 Vous pouvez le faire sommation avec des nombres entiers, ou vous 243 00:12:56,970 --> 00:13:00,870 peut faire la concaténation de chaîne, et peut-être quelques autres choses aussi. 244 00:13:00,870 --> 00:13:05,550 Mais si cet opérateur ne reconnaît pas ce qui est de chaque côté de celui-ci, 245 00:13:05,550 --> 00:13:10,452 ou plutôt la combinaison de ceux- deux types, ne sont pas ce qu'il attend, 246 00:13:10,452 --> 00:13:11,910 alors il va provoquer une panne. 247 00:13:11,910 --> 00:13:16,690 >> Donc dans ce cas, ça veut dire quoi d'avoir une chaîne plus un nombre entier? 248 00:13:16,690 --> 00:13:18,880 Bien dans le contexte de cela, nous voulons probablement 249 00:13:18,880 --> 00:13:21,990 à faire une opération de concaténation de chaîne. 250 00:13:21,990 --> 00:13:26,420 Mais bien sûr l'ordinateur ne pas avoir ce genre de contexte. 251 00:13:26,420 --> 00:13:29,950 Et donc nous avons besoin de fournir que des informations supplémentaires 252 00:13:29,950 --> 00:13:32,390 afin qu'il sache ce qu'il est que nous voulons faire. 253 00:13:32,390 --> 00:13:36,860 >> En d'autres termes, le fait que Swift est fortement typé 254 00:13:36,860 --> 00:13:39,520 signifie que vous avez à faire un peu de travail supplémentaire 255 00:13:39,520 --> 00:13:42,100 pour le faire fonctionner le manière que vous voulez. 256 00:13:42,100 --> 00:13:43,710 Mais de ce fait, il est plus sûr. 257 00:13:43,710 --> 00:13:46,290 Et une fois que vous avez prendre compte de ces types, 258 00:13:46,290 --> 00:13:49,300 les choses commencent franchement fonctionner assez bien. 259 00:13:49,300 --> 00:13:52,520 >> Donc dans ce cas, nous serions alors effectuer la concaténation 260 00:13:52,520 --> 00:13:56,040 par coulée explicitement l'entier en chaîne 261 00:13:56,040 --> 00:13:58,490 en l'enveloppant dans cette capitale fonction S String, 262 00:13:58,490 --> 00:14:03,510 puis en utilisant la concaténation de chaîne opérateur de modifier notre variable de l'étiquette, 263 00:14:03,510 --> 00:14:06,280 et puis l'imprimer. 264 00:14:06,280 --> 00:14:08,420 >> Jusqu'ici, tout va bien? 265 00:14:08,420 --> 00:14:12,020 Très bien, passons à autre chose. 266 00:14:12,020 --> 00:14:16,300 >> Maintenant, il ya une variété de données types que nous pouvons utiliser à Swift. 267 00:14:16,300 --> 00:14:21,620 Comme vous l'avez pris l'habitude de, nous pouvons créer un tableau modifiable. 268 00:14:21,620 --> 00:14:26,140 Et ce tableau ne peut contenir un seul type. 269 00:14:26,140 --> 00:14:30,360 >> Donc dans ce cas, nous allons créer un mutables tableaux de nombres entiers, 270 00:14:30,360 --> 00:14:34,800 nous appelons les qualités, et nous serons en mesure de stocker que dans ce crochet 271 00:14:34,800 --> 00:14:38,650 format que vous avez pris l'habitude à une variété d'autres langues. 272 00:14:38,650 --> 00:14:41,150 Mais remarquons que nous sommes ici la définition d'un certain nombre de choses. 273 00:14:41,150 --> 00:14:45,350 grades est un variable-- mutable nous pas utiliser le mot clé let. 274 00:14:45,350 --> 00:14:49,620 Cela signifie donc que nous pouvons ensuite modifier le contenu de ce tableau. 275 00:14:49,620 --> 00:14:53,420 Il est de type Array Int, et nous pouvons dire que 276 00:14:53,420 --> 00:14:56,260 sur la base de ces crochets ici. 277 00:14:56,260 --> 00:14:58,930 >> Or l'une des belles choses à ce sujet est que nous 278 00:14:58,930 --> 00:15:02,310 avoir accès à un grand nombre de Information Supplémentaire 279 00:15:02,310 --> 00:15:07,110 sur le réseau en utilisant simplement une notation simple point. 280 00:15:07,110 --> 00:15:10,500 Ainsi, par exemple, grades.count nous fournit 281 00:15:10,500 --> 00:15:14,820 le nombre d'éléments qui existent en ce que tableau, que nous pouvons alors accéder jolie 282 00:15:14,820 --> 00:15:19,090 facilement en utilisant simplement que la notation de points. 283 00:15:19,090 --> 00:15:21,830 >> Si vous souhaitez ajouter supplémentaire articles à ce tableau, 284 00:15:21,830 --> 00:15:27,220 vous ne pouvez pas faire le style de PHP où vous venez de définir explicitement, 285 00:15:27,220 --> 00:15:30,910 à un indice donné, une certaine valeur que vous souhaitez insérer. 286 00:15:30,910 --> 00:15:37,210 Au lieu de cela, utilisez le append procédé dans le type de tableau 287 00:15:37,210 --> 00:15:40,920 pour ajouter cet élément, 95, à cette liste. 288 00:15:40,920 --> 00:15:45,990 >> Alors maintenant, ce tableau a la suivante contents-- 100, 0, 90, 85. 289 00:15:45,990 --> 00:15:49,270 Et maintenant, nous avons apposé leurs 95 à cela aussi. 290 00:15:49,270 --> 00:15:51,830 >> Il ya d'autres façons nous pouvons ajouter des choses. 291 00:15:51,830 --> 00:15:55,030 Vous pouvez effectivement utiliser un opérateur de sommation, 292 00:15:55,030 --> 00:15:59,200 qui sera interprété comme une opération réseau de append. 293 00:15:59,200 --> 00:16:04,680 Et vous pouvez ajouter une autre, puis tableau, dont les contenus sont 70 et 80, 294 00:16:04,680 --> 00:16:05,560 à ce tableau. 295 00:16:05,560 --> 00:16:08,250 Alors maintenant, nous avons la le contenu de cette variable 296 00:16:08,250 --> 00:16:17,220 grades-- 100, 0, 90, 85, 95, 70, et 80. 297 00:16:17,220 --> 00:16:21,850 Ceci est juste un joli petit syntaxique Swift sucre qui nous fournit. 298 00:16:21,850 --> 00:16:23,850 >> Donc, si nous voulons résumer le grades, nous sommes peut-être 299 00:16:23,850 --> 00:16:27,340 allez vouloir itérer sur chaque article dans cette boucle. 300 00:16:27,340 --> 00:16:32,150 Et nous avons, à Swift, la notion d'une boucle que vous attendez. 301 00:16:32,150 --> 00:16:35,350 Mais la façon dont nous indiquons une gamme est légèrement différente. 302 00:16:35,350 --> 00:16:37,790 Donc dans ce cas, à résumer tout, nous allons 303 00:16:37,790 --> 00:16:40,650 va créer un temporaire variable appelée somme pour que nous 304 00:16:40,650 --> 00:16:42,580 de maintenir ce nombre. 305 00:16:42,580 --> 00:16:44,430 >> Et remarquez notre pour boucle construction ici. 306 00:16:44,430 --> 00:16:46,820 Pour l'index de 0 .. 00:16:51,480 308 00:16:51,480 --> 00:16:57,390 Donc, cette construction, 0 .. 00:17:01,860 dire que nous allons créer une gamme de nombres entiers de 0 310 00:17:01,860 --> 00:17:05,750 mais à l'exclusion grades.count. 311 00:17:05,750 --> 00:17:09,577 Ce sera donc 0, 1, 2, 3, 4, 5, jusqu'à un mais beaucoup 312 00:17:09,577 --> 00:17:10,410 avant grades.count. 313 00:17:10,410 --> 00:17:14,160 >> Donc ce qui est différent de la façon dont nous serait typiquement utilisé pour les boucles 314 00:17:14,160 --> 00:17:18,569 où vous auriez un indice variables, elle a mis égal à 0 au premier abord, 315 00:17:18,569 --> 00:17:25,480 puis intégrer cette jusqu'à ce que certains valeur inférieure à la numération des articles 316 00:17:25,480 --> 00:17:27,140 dans ce tableau. 317 00:17:27,140 --> 00:17:29,820 >> Donc, il ya une modification pour cela, en fait, 318 00:17:29,820 --> 00:17:35,010 ce qui nous permet de créer très facilement définir différents types de gammes. 319 00:17:35,010 --> 00:17:40,570 Si vous changez cette gamme de trois points, 0 ... grade.count, 320 00:17:40,570 --> 00:17:45,120 ce qui représente la gamme 0 à grades.count inclusif, 321 00:17:45,120 --> 00:17:49,260 ce qui signifie que ce nombre est également puis inclus dans cette gamme. 322 00:17:49,260 --> 00:17:52,110 >> Mais cela est très pratique pour ces choses exactes, 323 00:17:52,110 --> 00:17:54,590 quand nous avons à effectuer itérations plus de boucle 324 00:17:54,590 --> 00:17:59,630 parce que ces indices sont indexés zéro, comme nous l'avons vu dans d'autres langues 325 00:17:59,630 --> 00:18:02,360 aussi. 326 00:18:02,360 --> 00:18:05,210 Des questions sur cette boucle for? 327 00:18:05,210 --> 00:18:10,660 >> Donc, il ya définition implicite de cette variable d'index, 328 00:18:10,660 --> 00:18:14,350 dont la valeur commence à 0, et continue à chaque itération de la boucle 329 00:18:14,350 --> 00:18:17,950 augmenter de 1 jusqu'à un point qui est égale à grades.count, 330 00:18:17,950 --> 00:18:20,380 à quel point, la boucle est abandonnée. 331 00:18:20,380 --> 00:18:23,730 >> Notez que dans notre chaîne l'interpolation ici, 332 00:18:23,730 --> 00:18:26,910 nous pouvons effectuer quelques simples manipulations à ces valeurs. 333 00:18:26,910 --> 00:18:31,230 Donc index plus 1 sera effectivement effectuer une sommation de cette valeur 334 00:18:31,230 --> 00:18:34,780 parce que l'indice est, en ce cas, un nombre entier. 335 00:18:34,780 --> 00:18:37,810 Et à ce moment, il sera ensuite être converti en une chaîne 336 00:18:37,810 --> 00:18:42,230 et interpolée dans cette chaîne ici, et imprimé que nous pourrions nous attendre. . 337 00:18:42,230 --> 00:18:44,520 >> Et la bonne chose sur les matrices est ici 338 00:18:44,520 --> 00:18:50,730 que nous sommes également en mesure d'avoir Obtention des valeurs et des valeurs de réglage 339 00:18:50,730 --> 00:18:54,080 en utilisant la notation de crochet que nous avons vu dans d'autres langues aussi. 340 00:18:54,080 --> 00:18:57,130 341 00:18:57,130 --> 00:19:01,030 >> Très bien, alors à partir d'ici, nous maintenant calculer notre somme de toutes nos qualités. 342 00:19:01,030 --> 00:19:02,780 Maintenant sorte de la prochaine étape logique serait 343 00:19:02,780 --> 00:19:07,580 à faire une opération de division pour trouver la moyenne de ces grades. 344 00:19:07,580 --> 00:19:10,150 Mais quelque chose d'important ici qui se passe 345 00:19:10,150 --> 00:19:15,020 est que cette somme est peut-être un nombre entier. 346 00:19:15,020 --> 00:19:18,020 Mais nous avons besoin de pouvoir effectuer certains sorte de double division. 347 00:19:18,020 --> 00:19:20,600 Et cela va être extrêmement important quand 348 00:19:20,600 --> 00:19:24,140 nous voulons effectuer cette opération, parce que ce que nous disons 349 00:19:24,140 --> 00:19:28,430 est que nous devons effectivement effectuer division sur deux doubles. 350 00:19:28,430 --> 00:19:31,370 Et encore une fois, parce que Swift est très fortement typé, 351 00:19:31,370 --> 00:19:36,760 nous devons définir explicitement l'ensemble des articles à double avant que nous 352 00:19:36,760 --> 00:19:38,300 effectuer cette opération. 353 00:19:38,300 --> 00:19:40,550 >> Donc, pour nous accomplir une double division, 354 00:19:40,550 --> 00:19:43,730 il ne suffit pas pour une seule de ces éléments pour être un double. 355 00:19:43,730 --> 00:19:46,400 Tous deux ont pour être un double dans l'ordre pour SWIFT 356 00:19:46,400 --> 00:19:50,860 pour être sûr que ce est ce que nous voulons faire. 357 00:19:50,860 --> 00:19:54,360 Donc, nous allons ensuite explicitement catalogué la somme que nous avons calculé ci-dessus 358 00:19:54,360 --> 00:19:58,970 et le nombre de grades à doubles, et puis effectuer cette opération et magasin 359 00:19:58,970 --> 00:20:02,390 que dans cette nouvelle variable, ou plutôt cette nouvelle constante appelée moyenne, 360 00:20:02,390 --> 00:20:06,810 qui aura ce type, vous imaginez? 361 00:20:06,810 --> 00:20:07,587 Double, ouais. 362 00:20:07,587 --> 00:20:09,420 Donc dans ce cas, nous ne pas avoir à le spécifier 363 00:20:09,420 --> 00:20:13,450 car il peut être déduit de la opération ce type de moyen de données 364 00:20:13,450 --> 00:20:14,730 sera. 365 00:20:14,730 --> 00:20:19,025 Et Swift est généralement assez bon d'être en mesure de déduire les types. 366 00:20:19,025 --> 00:20:22,116 367 00:20:22,116 --> 00:20:24,200 >> Voulez-vous voir cette cours, ou que je peux passer à autre chose? 368 00:20:24,200 --> 00:20:25,640 Je veux continuer. 369 00:20:25,640 --> 00:20:28,130 Vous avez des questions sur tout cela? 370 00:20:28,130 --> 00:20:28,630 Formidable. 371 00:20:28,630 --> 00:20:31,160 372 00:20:31,160 --> 00:20:35,010 >> Maintenant, nous allons commencer à se rendre à les bonnes fonctions déterminantes stuff--, 373 00:20:35,010 --> 00:20:39,090 et un couple d'autres types qui sont unique de Swift que vous ne l'avez pas 374 00:20:39,090 --> 00:20:41,620 vu dans d'autres langues jusqu'à ce point, 375 00:20:41,620 --> 00:20:46,290 mais ils sont présents dans les autres langues que vous pourriez trouver plus tard. 376 00:20:46,290 --> 00:20:48,210 Alors d'abord si vous voulez à définir une fonction, 377 00:20:48,210 --> 00:20:52,170 vous définissez avec le mot génial fonction, puis le nom de la fonction, 378 00:20:52,170 --> 00:20:56,710 Et puis, dans les parenthèses, les arguments que vous voulez que la fonction d'accepter. 379 00:20:56,710 --> 00:21:00,280 Les arguments doivent également specify-- generally-- 380 00:21:00,280 --> 00:21:05,010 doit également spécifier le type de données qui ils sont, à moins qu'ils ne puissent être déduits. 381 00:21:05,010 --> 00:21:07,500 Et nous voyons que peu mise en garde dans un tout petit peu. 382 00:21:07,500 --> 00:21:09,920 >> Donc dans ce cas, nous avons une fonction appelée printGradeCount. 383 00:21:09,920 --> 00:21:12,840 Nous allons accepter une variable-- ou plutôt dans ce cas, 384 00:21:12,840 --> 00:21:14,450 un constant-- appelé carnet de notes. 385 00:21:14,450 --> 00:21:18,517 Et il va être de tapez tableau d'entiers. 386 00:21:18,517 --> 00:21:20,600 Maintenant, il ya quelque chose qui est vraiment important ici 387 00:21:20,600 --> 00:21:21,849 que je veux que vous compreniez. 388 00:21:21,849 --> 00:21:27,560 Voilà que par défaut, ces arguments qui sont entrées à cette fonction sont 389 00:21:27,560 --> 00:21:34,380 défini avec un mot-clé let implicite, ce qui signifie que je ne peux pas modifier cette 390 00:21:34,380 --> 00:21:39,850 variable de carnet de notes ici. 391 00:21:39,850 --> 00:21:43,360 Et ce genre de logique, parce que vous êtes de passage dans les données. 392 00:21:43,360 --> 00:21:45,860 Et vous ne voulez peut-être pas d'être changé de sous vous. 393 00:21:45,860 --> 00:21:50,800 Il est possible de mentionner explicitement ce qui est une variable en plaçant 394 00:21:50,800 --> 00:21:52,070 le mot-clé var ici. 395 00:21:52,070 --> 00:21:56,832 Mais cela est une chasse aux sorcières que nous avons les gens ont remarqué l'ont fait dans le passé 396 00:21:56,832 --> 00:21:59,790 est qu'ils supposaient que ça va comme une variable, alors qu'en fait, il 397 00:21:59,790 --> 00:22:02,640 est une constante. 398 00:22:02,640 --> 00:22:07,340 >> Très bien, alors ici, alors, dans ce cas, nous ne spécifiant pas de type de retour. 399 00:22:07,340 --> 00:22:09,460 Nous allons vous montrer comment faire que dans un instant. 400 00:22:09,460 --> 00:22:12,340 Mais remarquez que nous avons ici juste un simple si la condition. 401 00:22:12,340 --> 00:22:14,560 Si le carnet de notes est vide, ce qui dans ce cas 402 00:22:14,560 --> 00:22:19,310 est tout simplement la propriété de cet entier tableau, alors nous imprimer quelque chose. 403 00:22:19,310 --> 00:22:23,100 Sinon, nous faisons quelque chose d'autre. 404 00:22:23,100 --> 00:22:25,000 >> Assez simple, jusqu'ici, je pense. 405 00:22:25,000 --> 00:22:27,960 Mais arrêtez-moi si vous avez des questions. 406 00:22:27,960 --> 00:22:33,350 >> Maintenant cette fonction, en moyenne, prend également certains arguments, ou plutôt un argument, 407 00:22:33,350 --> 00:22:37,507 qui est le carnet de notes, et cette fois- va retourner un type double. 408 00:22:37,507 --> 00:22:39,340 Parce qu'il est calcule la moyenne et il est 409 00:22:39,340 --> 00:22:45,010 va revenir effectivement que moyenne calculée à la ligne d'appel. 410 00:22:45,010 --> 00:22:50,070 >> Dans ce cas, nous spécifions le le type de retour après une flèche. 411 00:22:50,070 --> 00:22:53,260 Et cela pourrait se sentir un peu bizarre au premier abord. 412 00:22:53,260 --> 00:22:55,610 Vous avez pris l'habitude à la mise au retour 413 00:22:55,610 --> 00:22:57,720 saisir avant le nom de la fonction. 414 00:22:57,720 --> 00:23:00,310 Mais si vous pensez de cette en termes de mathématiques, 415 00:23:00,310 --> 00:23:03,320 comme lorsque vous avez les mathématiques qui définissent une fonction, 416 00:23:03,320 --> 00:23:06,807 vous avez une fonction avec une certaine entrées, et il produit une sortie. 417 00:23:06,807 --> 00:23:08,890 Et qui est exactement ce que ce qui est censé imiter. 418 00:23:08,890 --> 00:23:12,460 Et il ya une couple d'autres langues qui ont une syntaxe similaire ainsi, 419 00:23:12,460 --> 00:23:15,674 mais sans doute aucun que vous avez vu dans CS50. 420 00:23:15,674 --> 00:23:17,090 Mais encore ne pas être confondu par elle. 421 00:23:17,090 --> 00:23:21,650 La flèche signifie ce qui se passe être renvoyé dans ce cas. 422 00:23:21,650 --> 00:23:23,650 OK, alors comment allons-nous pour calculer cette moyenne? 423 00:23:23,650 --> 00:23:25,649 Eh bien, si le carnet de notes est vide, eh bien nous sommes 424 00:23:25,649 --> 00:23:30,731 va retourner 0, ce qui peut-être une façon raisonnable de traiter cette. 425 00:23:30,731 --> 00:23:32,980 Je ne sais pas, nous allons venir revenir dans un peu. 426 00:23:32,980 --> 00:23:34,688 Ce ne peut pas réellement une façon raisonnable 427 00:23:34,688 --> 00:23:38,310 pour calculer une moyenne si nous avons un carnet de notes vide. 428 00:23:38,310 --> 00:23:41,260 >> Ensuite, nous allons simplement effectuons notre sommation. 429 00:23:41,260 --> 00:23:43,900 Notez que nous avons fait ici avoir une version alternative d'un 430 00:23:43,900 --> 00:23:49,190 pour la boucle, ce qui nous permet d'itérer sur chaque article unique dans un tableau 431 00:23:49,190 --> 00:23:53,630 et placer chaque élément dans son propre variable. 432 00:23:53,630 --> 00:23:56,200 En spécifiant pour le grade en carnet de notes, ce que nous disons 433 00:23:56,200 --> 00:24:00,560 est que nous allons implicitement créer une nouvelle constante appelée 434 00:24:00,560 --> 00:24:05,180 qualité qui va représenter chaque élément unique dans le carnet de notes 435 00:24:05,180 --> 00:24:06,769 chaque fois que la boucle for. 436 00:24:06,769 --> 00:24:08,560 Donc, la première fois que il est géré, note sera 437 00:24:08,560 --> 00:24:09,800 être le premier élément dans le carnet de notes. 438 00:24:09,800 --> 00:24:12,300 La deuxième fois, ce sera la deuxième point, ainsi de suite et ainsi de suite 439 00:24:12,300 --> 00:24:15,970 jusqu'à ce carnet de notes a est épuisée d'éléments. 440 00:24:15,970 --> 00:24:20,390 Ensuite, nous serons en mesure de résumer ce que qualité dans notre variable de sommation 441 00:24:20,390 --> 00:24:22,570 et retourner à notre moyenne que nous avons vu auparavant. 442 00:24:22,570 --> 00:24:25,670 443 00:24:25,670 --> 00:24:26,950 OK, des questions? 444 00:24:26,950 --> 00:24:27,699 Oui? 445 00:24:27,699 --> 00:24:28,990 AUDIENCE: Je voudrais poser deux questions. 446 00:24:28,990 --> 00:24:33,586 Numéro un, hypothétiquement, peut vous exécutez entier sur celui-ci? 447 00:24:33,586 --> 00:24:35,604 N'a pas d'être un double, est-ce exact? 448 00:24:35,604 --> 00:24:37,520 DAN AMRMENDARIZ: Pouvez-vous répéter la question? 449 00:24:37,520 --> 00:24:39,587 AUDIENCE: Puis-je faire entier comme la moyenne? 450 00:24:39,587 --> 00:24:41,670 DAN AMRMENDARIZ: Pouvez-vous faire entier comme un moyen? 451 00:24:41,670 --> 00:24:45,015 Donc retourner un entier moyen au lieu d'un double? 452 00:24:45,015 --> 00:24:48,204 >> AUDIENCE: vous Return-- avoir ce droit maintenant ci-dessous. 453 00:24:48,204 --> 00:24:49,870 DAN AMRMENDARIZ: Juste ici, retourner 0.0? 454 00:24:49,870 --> 00:24:51,790 AUDIENCE: Ouais, il suffit de retourner 0. 455 00:24:51,790 --> 00:24:56,590 Donc, ce sera soit 80 ou 85, mais pas 85,2. 456 00:24:56,590 --> 00:24:59,465 >> DAN AMRMENDARIZ: Donc, dans ce cas, donc il ya un couple de différentes façons 457 00:24:59,465 --> 00:25:00,090 pour répondre à cela. 458 00:25:00,090 --> 00:25:02,760 Permettez-moi de leur répondre dans l'ordre. 459 00:25:02,760 --> 00:25:06,740 Donc, si je viens de faire ce retour 0, a 0 est une valeur entière. 460 00:25:06,740 --> 00:25:09,730 Et ce qui va provoquer une erreur de type pour ce cas 461 00:25:09,730 --> 00:25:13,210 car il attend une double mais est ensuite retournant un entier. 462 00:25:13,210 --> 00:25:16,770 Si je veux retourner un entier, je peux. 463 00:25:16,770 --> 00:25:20,450 Je peux définir le type de retour int, 0 revenir ici, 464 00:25:20,450 --> 00:25:22,047 et non pas accomplir une double division. 465 00:25:22,047 --> 00:25:23,880 Mais alors nous serions faisant division entière. 466 00:25:23,880 --> 00:25:27,080 Et donc nous serions alors pas obtenir le moyenne que nous aurions peut-être attendre. 467 00:25:27,080 --> 00:25:29,210 Mais oui, nous pouvons modifier les types de cette façon. 468 00:25:29,210 --> 00:25:32,598 >> Public: Et deuxièmement, vous avoir une double sur le dessus. 469 00:25:32,598 --> 00:25:35,502 Mais en bas, lorsque vous faire revenir Double Double, 470 00:25:35,502 --> 00:25:38,280 qui est déjà automatiquement retour en format double. 471 00:25:38,280 --> 00:25:42,278 Pourquoi avez-vous toujours besoin de définir avec la flèche sur le dessus avec un double? 472 00:25:42,278 --> 00:25:45,010 >> DAN AMRMENDARIZ: Donc, dans le cas, cela fait partie 473 00:25:45,010 --> 00:25:50,580 de the-- afin de répéter la question, parce qu'il est implicite du retour 474 00:25:50,580 --> 00:25:56,030 types ici, quel type de cette réalité est, nous avons besoin d'être explicite sur Swift 475 00:25:56,030 --> 00:25:59,970 à propos de ce que nous voulons revenir sur cette fonction 476 00:25:59,970 --> 00:26:02,690 de sorte que lorsqu'il effectue saisir le contrôle, il peut faire en sorte 477 00:26:02,690 --> 00:26:05,850 que ce que nous avons effectivement écrit bas fait conforme à ce. 478 00:26:05,850 --> 00:26:10,225 Donc, il est un peu comme un chèque avec vous-même genre de situation. 479 00:26:10,225 --> 00:26:11,050 Mais il y a-- 480 00:26:11,050 --> 00:26:12,560 >> AUDIENCE: [inaudible] Arrow? 481 00:26:12,560 --> 00:26:19,490 >> DAN AMRMENDARIZ: Il ya des cas où nous pouvons préciser que nous pouvons implicitement 482 00:26:19,490 --> 00:26:21,550 définir le type de retour. 483 00:26:21,550 --> 00:26:23,940 Mais dans ce cas, je ne sais pas pense que cela pourrait fonctionner. 484 00:26:23,940 --> 00:26:26,190 Il ya une autre syntaxe que nous verrons plus tard. 485 00:26:26,190 --> 00:26:30,320 486 00:26:30,320 --> 00:26:35,280 >> Très bien, alors cette source code est un peu différent 487 00:26:35,280 --> 00:26:41,839 parce que cette analyse des arguments de la fonction que nous appelons. 488 00:26:41,839 --> 00:26:44,130 Permettez-moi de vous montrer comment cela fonctionne: avant de passer réellement sur 489 00:26:44,130 --> 00:26:48,050 à des choses intéressantes ce qui se passe à Swift. 490 00:26:48,050 --> 00:26:51,870 >> Donc dans ce cas, si je viens de lancer cette Code, vous remarquerez que ce qu'il fait 491 00:26:51,870 --> 00:26:54,900 tandis est--, il sorte de me donne une erreur bizarre. 492 00:26:54,900 --> 00:26:59,730 Je dois passer une couple de entiers comme un argument de ligne de commande. 493 00:26:59,730 --> 00:27:06,220 Voyons donc, 150 et 80, et appuyez sur Entrée pour savoir ce qu'il est en train de faire. 494 00:27:06,220 --> 00:27:09,890 Il est d'accepter chacun des ces valeurs comme des nombres entiers. 495 00:27:09,890 --> 00:27:12,040 Il est de les entrer dans un carnet de notes. 496 00:27:12,040 --> 00:27:14,470 Et puis il est l'exécution que calcul de la moyenne 497 00:27:14,470 --> 00:27:16,650 et délivrer que nous pourrions nous attendre. 498 00:27:16,650 --> 00:27:19,950 >> Mais évidemment, il ya quelque chose à faire avec quelque chose sur cette rejetant 499 00:27:19,950 --> 00:27:23,300 quelque chose comme un entier. 500 00:27:23,300 --> 00:27:27,300 Comme vous pouvez vous rappeler de quand nous étions traiter avec des arguments de ligne de commande 501 00:27:27,300 --> 00:27:32,640 en C et d'autres langues, le premier 0-ème élément dans cet argument de ligne de commande 502 00:27:32,640 --> 00:27:35,774 liste est le nom de la commande que nous effectivement exécutées. 503 00:27:35,774 --> 00:27:38,690 Donc dans ce cas, je suis juste en boucle sur tous les arguments de ligne de commande. 504 00:27:38,690 --> 00:27:41,650 Mais je ne fais pas toute sorte de fantaisie vérifiez que sauter premier. 505 00:27:41,650 --> 00:27:45,920 Je suis juste explicitement ou implicitement je suis vérifier laquelle de ces types 506 00:27:45,920 --> 00:27:49,900 sont des nombres entiers avant que je ne effectuer ce calcul. 507 00:27:49,900 --> 00:27:52,420 >> Et qui est essentiellement Qu'est-ce qu'il se passe ici. 508 00:27:52,420 --> 00:27:55,860 Pour chaque argument en les arguments de ce processus, 509 00:27:55,860 --> 00:27:59,210 Je vais effectuer une vérification. 510 00:27:59,210 --> 00:28:01,970 Et dans ce cas, je vais pour tenter de convertir d'abord 511 00:28:01,970 --> 00:28:07,620 cet argument en un entier par effectuer une conversion de type explicite, 512 00:28:07,620 --> 00:28:12,310 car il est, en entrée, une chaîne et, en fait, pas un entier. 513 00:28:12,310 --> 00:28:18,140 >> Mais cela est une sorte de syntaxe bizarre, le grade équivaut à laisser Int (argument). 514 00:28:18,140 --> 00:28:21,120 Qu'est-ce qui se passe réellement ici est extrêmement 515 00:28:21,120 --> 00:28:24,390 important pour votre aide Swift. 516 00:28:24,390 --> 00:28:27,610 Cela est d'utiliser ce qui est appelé un type optionnel. 517 00:28:27,610 --> 00:28:34,790 >> Donc cette fonction, Int (argument), renvoie pas seulement un nombre entier, mais les retours 518 00:28:34,790 --> 00:28:37,470 ce qu'on appelle un entier optionnel. 519 00:28:37,470 --> 00:28:41,200 Et donc cela est une sorte de un type au-dessus d'un type. 520 00:28:41,200 --> 00:28:45,900 Vous pouvez sorte de l'imaginer comme il est de retour comme un paquet. 521 00:28:45,900 --> 00:28:47,750 Et quand vous ouvrez ce paquet, il soit 522 00:28:47,750 --> 00:28:53,930 a un nombre entier, ce qui est le résultat, ou il n'a absolument rien du tout. 523 00:28:53,930 --> 00:28:58,140 Et ce qui est utile en tant que vérification d'erreur mécanisme, car dans ce cas 524 00:28:58,140 --> 00:29:02,080 nous pouvons trouver, était-ce conversion réussie de type? 525 00:29:02,080 --> 00:29:05,810 Si cela était, il est en fait va avoir un nombre entier à l'intérieur. 526 00:29:05,810 --> 00:29:08,750 Sinon, il va avoir une certaine valeur que nous appellerons nul, ce qui 527 00:29:08,750 --> 00:29:10,920 est représentatif d'aucun entier du tout. 528 00:29:10,920 --> 00:29:13,270 Il est vraiment représentatif de rien. 529 00:29:13,270 --> 00:29:18,130 >> Et donc cela si la construction nous permet de déballer ce paquet, 530 00:29:18,130 --> 00:29:19,850 que option de liaison. 531 00:29:19,850 --> 00:29:25,560 Et si nous sommes en mesure de déballer ce que emballer et de trouver un nombre entier à l'intérieur, 532 00:29:25,560 --> 00:29:27,720 alors ce que nous disons ici est que nous allons ensuite 533 00:29:27,720 --> 00:29:33,090 permettre à cette valeur à être mis en cette constante appelé grade. 534 00:29:33,090 --> 00:29:36,590 Et cette partie de l'instruction if, la partie supérieure de l'instruction if 535 00:29:36,590 --> 00:29:40,390 se déroulera, parce que unwrap a réussi. 536 00:29:40,390 --> 00:29:43,290 >> Si il se trouve que il y avait peut-être une erreur 537 00:29:43,290 --> 00:29:47,040 Dans cette conversion de type explicite à partir d'une chaîne en entier, peut-être 538 00:29:47,040 --> 00:29:49,160 il est l'ABC de valeur par exemple. 539 00:29:49,160 --> 00:29:52,120 Et cela est en fait ne va pas de se convertir à un nombre entier. 540 00:29:52,120 --> 00:29:55,520 Ensuite, il sera de retour à zéro, qui est un nombre entier non. 541 00:29:55,520 --> 00:29:57,570 Et cette déclaration si bien alors sûr. 542 00:29:57,570 --> 00:30:01,930 qualité ne sera pas exister parce que il n'a pas de teneur en entier. 543 00:30:01,930 --> 00:30:06,391 Et elle se déroulera ce bloc d'autre à la place. 544 00:30:06,391 --> 00:30:06,890 Oui? 545 00:30:06,890 --> 00:30:09,652 >> AUDIENCE: Néant est N-I-L? 546 00:30:09,652 --> 00:30:11,110 DAN AMRMENDARIZ: nil est N-I-L, oui. 547 00:30:11,110 --> 00:30:14,970 548 00:30:14,970 --> 00:30:20,310 >> Donc, cela est peut-être l'un des les plus difficiles de choses sur Swift, 549 00:30:20,310 --> 00:30:23,690 surtout quand vous êtes dans les mauvaises herbes sur une application iOS 550 00:30:23,690 --> 00:30:27,442 et vous êtes en train d'essayer faire un peu de développement là-bas. 551 00:30:27,442 --> 00:30:29,400 Ça va être criant à vous au sujet optionnel. 552 00:30:29,400 --> 00:30:33,050 Il va vous poser des points d'interrogation et points d'exclamation. 553 00:30:33,050 --> 00:30:37,100 Mais une fois que vous avez compris si vous out-- consacrer du temps à déterminer 554 00:30:37,100 --> 00:30:41,990 ce qui se passe avec les types en option, vous vous éviterez beaucoup de maux de tête 555 00:30:41,990 --> 00:30:46,040 que vous essayez de écrire une application à Swift. 556 00:30:46,040 --> 00:30:47,660 >> Il est en fait une fonctionnalité très puissante. 557 00:30:47,660 --> 00:30:49,826 Et vous aurez juste à prendre mon mot pour lui pour l'instant. 558 00:30:49,826 --> 00:30:52,620 Mais nous verrons cette construction et quelques autres aiment 559 00:30:52,620 --> 00:30:56,740 dans une partie de l'autre code source qui nous allons vous montrer dans un tout petit peu. 560 00:30:56,740 --> 00:31:00,440 >> Y at-il des questions initiales ici? 561 00:31:00,440 --> 00:31:03,790 562 00:31:03,790 --> 00:31:08,690 Donc, la livraison important est qu'un Type option est une sorte de métatype. 563 00:31:08,690 --> 00:31:12,500 Il a soit une valeur, et dans l'affirmative, alors il 564 00:31:12,500 --> 00:31:18,110 aura peut-être que la valeur associée avec elle, ou il n'a aucune valeur, 565 00:31:18,110 --> 00:31:19,620 et il est représenté par zéro. 566 00:31:19,620 --> 00:31:24,210 567 00:31:24,210 --> 00:31:28,870 Le reste de cette est peut-être comme vous le souhaitiez. 568 00:31:28,870 --> 00:31:32,900 >> Donc, nous allons la rampe difficulté encore une fois. 569 00:31:32,900 --> 00:31:37,070 Et cette fois, nous allons jeter un oeil à certains d'autres types de données qui existent réellement. 570 00:31:37,070 --> 00:31:41,290 L'un d'eux est dictionnaires, qui est très similaire à dictionnaires Python. 571 00:31:41,290 --> 00:31:48,270 Il est quelque peu semblable à une table de hachage C. Il est essentiellement un mappage de touches 572 00:31:48,270 --> 00:31:49,820 où les clés peuvent être des chaînes. 573 00:31:49,820 --> 00:31:52,670 Et quand vous regardez ces touches, ces clés auront une valeur. 574 00:31:52,670 --> 00:31:56,020 Donc, il est pas tout à fait un tableau, mais à la place, plus étroitement associés 575 00:31:56,020 --> 00:31:58,810 à une carte de hachage ou une table de hachage. 576 00:31:58,810 --> 00:32:02,420 >> Voyons comment cela est censé à travailler avant que nous 577 00:32:02,420 --> 00:32:05,210 aller dans le code source lui-même. 578 00:32:05,210 --> 00:32:07,680 Si je viens de courir ce, rien ne se passe vraiment. 579 00:32:07,680 --> 00:32:12,430 Il me dit que je vais attendre certains paramètres du type suivant. 580 00:32:12,430 --> 00:32:16,050 Donc, je vais fournir à il certains noms de problème posé, 581 00:32:16,050 --> 00:32:18,490 afin pset0, peut-être je suis 100. 582 00:32:18,490 --> 00:32:20,790 Et pset1, je suis arrivé à 5. 583 00:32:20,790 --> 00:32:24,630 Et puis à l'examen, je a vraiment bien et a obtenu 30. 584 00:32:24,630 --> 00:32:27,180 Et oups, je frappe un espace ici. 585 00:32:27,180 --> 00:32:30,940 >> Lorsque je tape Entrée, vous pouvez voir il effectue quelques calculs. 586 00:32:30,940 --> 00:32:33,740 Il dit carnet de notes est de trois grades, pset1, pset0, examen. 587 00:32:33,740 --> 00:32:36,120 Et le carnet de notes a cette moyenne spécifique. 588 00:32:36,120 --> 00:32:38,370 Encore une fois, nous travaillons avec cette idée du carnet de notes, 589 00:32:38,370 --> 00:32:44,650 mais nous allons continuer itération à la complexité de notre fonction. 590 00:32:44,650 --> 00:32:47,650 >> Donc, au début, nous sommes juste va créer une fonction qui 591 00:32:47,650 --> 00:32:49,390 est responsable de l'impression de l'utilisation. 592 00:32:49,390 --> 00:32:51,920 Et il ya cette sortie fonction qui sera juste 593 00:32:51,920 --> 00:32:53,710 force de quitter l'application. 594 00:32:53,710 --> 00:32:56,530 Cela ne veut pas quelque chose qui vous allez utiliser dans iOS. 595 00:32:56,530 --> 00:32:59,750 Ceci est seulement, dans ce cas, avec un argument de ligne de commande. 596 00:32:59,750 --> 00:33:01,990 Ensuite, nous allons commencer à se déplacer vers Xcode. 597 00:33:01,990 --> 00:33:07,760 Mais ceci est spécifique à une commande programme de style de ligne à Swift. 598 00:33:07,760 --> 00:33:11,490 >> Jetons un oeil à quelques-uns des les choses intéressantes ici. 599 00:33:11,490 --> 00:33:15,150 Voyons, seulement un couple de choses intéressantes oublier peut-être 600 00:33:15,150 --> 00:33:19,930 est que dans ma fonction de imprimer le nombre de grades, 601 00:33:19,930 --> 00:33:26,090 vous pourriez rappeler que je devais cette liste de pset1 items--, pset0, et l'examen. 602 00:33:26,090 --> 00:33:29,130 Vous pouvez effectivement rapidement et le faire facilement 603 00:33:29,130 --> 00:33:34,490 en prenant le carnet de notes, ce qui est un dictionnaire qui a les clés et les valeurs. 604 00:33:34,490 --> 00:33:38,730 Retrouvez l'ensemble de la clé est par la méthode des touches de points ici, 605 00:33:38,730 --> 00:33:43,180 et ensuite utiliser cette joinWithSeparator, qui prendra alors toutes les clés 606 00:33:43,180 --> 00:33:48,590 que nous avions tapé dans, ou pset1-- Désolé, pset0, pset1 et exam-- 607 00:33:48,590 --> 00:33:53,030 et concaténer ensemble en utilisant une virgule et un espace 608 00:33:53,030 --> 00:33:55,400 pour créer une longue chaîne. 609 00:33:55,400 --> 00:34:00,190 Cette opération est tout simplement phénoménal rejoindre utile dans une variété de contextes. 610 00:34:00,190 --> 00:34:03,450 Et il est donc cette joinWithSeparator. 611 00:34:03,450 --> 00:34:06,939 >> Et cela est une chose qui est changé par rapport à une Swift Swift 2. 612 00:34:06,939 --> 00:34:08,730 Il y avait un Python style-- si vous êtes 613 00:34:08,730 --> 00:34:13,219 familier avec Python-- un Python style de méthode de jointure sur les chaînes. 614 00:34:13,219 --> 00:34:15,699 Mais cela est plus le cas à Swift 2. 615 00:34:15,699 --> 00:34:19,400 Vous souhaitez utiliser cette option si vous voulez pour concaténer un tableau de trucs 616 00:34:19,400 --> 00:34:23,380 ensemble avec une chaîne. 617 00:34:23,380 --> 00:34:27,889 >> Donc, peut-être alors dans notre discussion de la moyenne avant, 618 00:34:27,889 --> 00:34:32,659 il fait un peu plus de sens pour nous de mettre la fonction moyenne 619 00:34:32,659 --> 00:34:36,610 être une option à double plutôt que juste un double-explicite. 620 00:34:36,610 --> 00:34:39,239 Parce que nous avons eu cette condition inhabituelle où, 621 00:34:39,239 --> 00:34:41,550 si effectivement gradebook n'a pas de valeurs à l'intérieur il? 622 00:34:41,550 --> 00:34:44,280 Quel devrait être le rendement moyen? 623 00:34:44,280 --> 00:34:46,350 >> Eh bien peut-être dans C vous aurait fait quelque chose 624 00:34:46,350 --> 00:34:50,040 comme prévu une valeur sentinelle, comme 0.0, ou peut-être un nombre négatif, 625 00:34:50,040 --> 00:34:53,690 ou quelque chose juste représentant le fait qu'il y avait une condition d'erreur 626 00:34:53,690 --> 00:34:57,910 et vous peut-être ne pas réellement avez la capacité de calculer cette moyenne. 627 00:34:57,910 --> 00:35:05,590 Eh bien la beauté de spécifier une Type option serait de le faire. 628 00:35:05,590 --> 00:35:09,540 Et je suis en train de dire toutes ces paroles, mais cela ne fait pas utiliser optionnels. 629 00:35:09,540 --> 00:35:12,970 Mais nous allons voir que dans un peu minutes où nous pouvons établir la moyenne 630 00:35:12,970 --> 00:35:17,230 pour être un type de données optionnelle afin de si elle renvoie effectivement certaines données, puis 631 00:35:17,230 --> 00:35:18,470 nous reviendrons ces données. 632 00:35:18,470 --> 00:35:20,570 Sinon, nous reviendrons nil, en disant que cette 633 00:35:20,570 --> 00:35:22,200 a aucun calcul significative. 634 00:35:22,200 --> 00:35:25,650 635 00:35:25,650 --> 00:35:28,570 >> Passons à autre chose. 636 00:35:28,570 --> 00:35:35,910 Donc à partir de là, nous avons examiné tous ces exemples dans la ligne de commande. 637 00:35:35,910 --> 00:35:39,470 Mais vraiment ce que vous allez à traiter avec Xcode est. 638 00:35:39,470 --> 00:35:43,720 Et l'une des choses gentilles sur Xcode est, et plus précisément à Swift, 639 00:35:43,720 --> 00:35:47,450 est que nous avons cette chose appelé un aire de jeux. 640 00:35:47,450 --> 00:35:51,470 Et une aire de jeux est pas du tout une application iOS. 641 00:35:51,470 --> 00:35:54,751 Mais il vous permet d'expérimenter Swift d'une manière très facile. 642 00:35:54,751 --> 00:35:56,000 Vous pouvez taper tout votre code. 643 00:35:56,000 --> 00:35:58,140 Il est très bien mis en évidence la syntaxe ici. 644 00:35:58,140 --> 00:36:01,600 Lorsque vous créez un nouveau fichier, il vous sera demandé si vous voulez créer une aire de jeux. 645 00:36:01,600 --> 00:36:08,720 Mais la bonne chose à propos du Playground est que sur la droite de votre fenêtre, 646 00:36:08,720 --> 00:36:12,020 ça fait de vous montrer sortie de votre code. 647 00:36:12,020 --> 00:36:16,110 Donc, si je fais défiler vers le bas, nous pouvons voir ce que la sortie de différentes lignes de code 648 00:36:16,110 --> 00:36:17,200 qui se passe réellement être. 649 00:36:17,200 --> 00:36:19,850 650 00:36:19,850 --> 00:36:26,790 >> Donc dans ce cas, nous allons changer de direction un peu 651 00:36:26,790 --> 00:36:30,960 et de parler de quelque chose qui est vraiment important de cette façon de haut niveau 652 00:36:30,960 --> 00:36:34,020 Swift qui fonctionne, et il est cette idée de fermetures. 653 00:36:34,020 --> 00:36:36,960 Et vous avez probablement déjà vu cette un peu en JavaScript. 654 00:36:36,960 --> 00:36:40,770 Pour ceux d'entre vous qui sont en CS50, fermetures 655 00:36:40,770 --> 00:36:47,240 sont très populaires très bonne façon de faire, les choses de haut niveau dans les langues modernes. 656 00:36:47,240 --> 00:36:50,270 Mais il est aussi un peu difficile à envelopper autour de votre tête la première fois. 657 00:36:50,270 --> 00:36:52,269 Donc, si vous cherchez à ce première fois, qui est OK. 658 00:36:52,269 --> 00:36:56,740 Il suffit de regarder le code source et de voir si vous pouvez le découvrir à la maison. 659 00:36:56,740 --> 00:37:01,050 >> Donc dans ce cas, disons que nous vouloir créer un grand nombre d'exposants 660 00:37:01,050 --> 00:37:04,134 avec une certaine valeur fixe. 661 00:37:04,134 --> 00:37:05,800 Donc, dans ce cas, je peux créer une fonction. 662 00:37:05,800 --> 00:37:09,270 Je vais l'appeler puissance de 2 dont le seul but dans la vie 663 00:37:09,270 --> 00:37:15,770 est de prendre un certain entrée et double , et retourner cette valeur. 664 00:37:15,770 --> 00:37:21,210 Remarquez que je suis ici accepter un type de données. 665 00:37:21,210 --> 00:37:23,137 Ça va être une variable appelée x. 666 00:37:23,137 --> 00:37:23,970 Il est de type double. 667 00:37:23,970 --> 00:37:26,190 Et je vais revenir un double ici. 668 00:37:26,190 --> 00:37:29,100 Et je vais juste faire très franchement, assez 669 00:37:29,100 --> 00:37:32,650 manière naïve de doubler cette valeur. 670 00:37:32,650 --> 00:37:35,600 Et je vais vous dire pourquoi ce spectacle est utile dans une seconde. 671 00:37:35,600 --> 00:37:40,418 >> Notez que nous avons ici cette gamme de nouveau. pour quelque chose dans 1, point 672 00:37:40,418 --> 00:37:44,130 point point, deux, ce qui signifie que cette boucle se déroulera deux fois. 673 00:37:44,130 --> 00:37:46,480 Mais cela représente une variable fictive. 674 00:37:46,480 --> 00:37:49,650 Cela signifie que je ne vais pas vraiment à soit en utilisant cette variable n'importe où 675 00:37:49,650 --> 00:37:51,070 à l'intérieur de cette boucle. 676 00:37:51,070 --> 00:37:55,380 Je veux juste cette ligne du code à exécuter deux fois, 677 00:37:55,380 --> 00:37:58,980 sans avoir à connaître la valeur de cet intervalle. 678 00:37:58,980 --> 00:38:02,570 >> Donc, dans ce cas, je vais courir résultat fois deux fois sur x, qui, essentiellement, 679 00:38:02,570 --> 00:38:06,560 veut dire que je suis la quadrature cette valeur. 680 00:38:06,560 --> 00:38:10,230 Et cela se produit pour travailler comme nous pourrions nous attendre. 681 00:38:10,230 --> 00:38:16,410 Puissance de 2, passant d'une valeur de 2.0 nous donne une sortie de 4. 682 00:38:16,410 --> 00:38:18,810 3.2 travaux pour 10,24. 683 00:38:18,810 --> 00:38:22,660 >> Maintenant, nous pouvons faire une similaire chose pour puissance de 3. 684 00:38:22,660 --> 00:38:25,330 Mais maintenant changer seulement la gamme. 685 00:38:25,330 --> 00:38:28,840 Pour variable fictive en 1 à 3, multipliez 3 fois, 686 00:38:28,840 --> 00:38:29,830 et faire la même chose. 687 00:38:29,830 --> 00:38:32,240 >> Donc, cela peut paraître un peu artificiel. 688 00:38:32,240 --> 00:38:34,270 Mais il ya une importante chose ici qui 689 00:38:34,270 --> 00:38:37,770 est que regarder ces deux fonctions, il ya 690 00:38:37,770 --> 00:38:43,600 une seule chose qui est différent, qui est cette valeur dans la gamme. 691 00:38:43,600 --> 00:38:46,910 Tout le reste de ces deux les fonctions de puissance, 3 et 2, de la puissance 692 00:38:46,910 --> 00:38:50,440 sont, en fait, identique car ils fonctionnent de la même façon. 693 00:38:50,440 --> 00:38:53,460 >> Donc, à ce stade, un peu sonnette d'alarme devrait être va off. 694 00:38:53,460 --> 00:38:56,200 Espérons que ce que vous dites, vous le savez, cela se sent un peu 695 00:38:56,200 --> 00:38:59,250 comme la duplication des efforts. 696 00:38:59,250 --> 00:39:02,950 Peut-être il ya une manière que je le ferais être capable d'encapsuler tout cela 697 00:39:02,950 --> 00:39:06,630 et fournir une fonction ou créer une fonction qui 698 00:39:06,630 --> 00:39:11,550 fait exactement ce que je veux sans besoin de taper explicitement. 699 00:39:11,550 --> 00:39:15,732 Et voici ce que la puissance d'une fermeture nous permet de faire. 700 00:39:15,732 --> 00:39:16,940 Donc, nous allons jeter un oeil à ce. 701 00:39:16,940 --> 00:39:18,700 Et je vais passer un couple minutes à ce sujet, parce que ce 702 00:39:18,700 --> 00:39:20,310 est assez important pour Swift. 703 00:39:20,310 --> 00:39:22,900 Nous voyons cela tout le temps. 704 00:39:22,900 --> 00:39:24,550 Nous allons définir une fonction. 705 00:39:24,550 --> 00:39:26,380 Ça va être appelé powerof. 706 00:39:26,380 --> 00:39:29,470 Il va accepter un paramètre appelé y de type int. 707 00:39:29,470 --> 00:39:32,220 Mais jetez un oeil à le type de retour. 708 00:39:32,220 --> 00:39:38,730 Le type de retour est, dans parenthèses, Double double flèche. 709 00:39:38,730 --> 00:39:43,370 Ce qui signifie que cette fonction, cette fonction powerof, 710 00:39:43,370 --> 00:39:46,550 est de retour d'une fonction. 711 00:39:46,550 --> 00:39:50,845 Qui accepte un double et en renvoyant un double. 712 00:39:50,845 --> 00:39:53,720 Donc, ça peut paraître un peu fou, mais nous allons faire défiler vers le bas un peu 713 00:39:53,720 --> 00:39:55,060 et de regarder pour voir ce qui se passe. 714 00:39:55,060 --> 00:39:57,910 Nous sommes à l'intérieur de cette fonction powerof. 715 00:39:57,910 --> 00:40:00,760 Nous créons une nouvelle fonction appelé exponentiateur, 716 00:40:00,760 --> 00:40:02,900 mais il n'a pas d'importance ce qu'il est. 717 00:40:02,900 --> 00:40:06,410 >> Notez que cela a une valeur d'entrée de x. 718 00:40:06,410 --> 00:40:09,910 Et il prend dans un double et en renvoyant un double. 719 00:40:09,910 --> 00:40:16,320 Et cela est le même code que nous vu ci-dessus, sauf que la valeur de 2 720 00:40:16,320 --> 00:40:20,060 ou la valeur de 3, qui limite supérieure de cette fourchette, 721 00:40:20,060 --> 00:40:23,210 a été remplacé par cette valeur de y, qui 722 00:40:23,210 --> 00:40:27,230 était le paramètre initial de notre fonction de powerof. 723 00:40:27,230 --> 00:40:31,700 Et à ce stade, nous retourner exponentiateur. 724 00:40:31,700 --> 00:40:33,345 Nous sommes de retour de la fonction. 725 00:40:33,345 --> 00:40:36,300 726 00:40:36,300 --> 00:40:39,550 >> Il est un peu comme un peu de l'esprit souffle. 727 00:40:39,550 --> 00:40:44,360 Mais imaginons ce qui se passe quand je l'appelle cette fonction powerof 728 00:40:44,360 --> 00:40:47,610 et de passer en elle une certaine valeur comme 2. 729 00:40:47,610 --> 00:40:50,020 Ce que cela signifie est que Je dois maintenant la valeur 730 00:40:50,020 --> 00:40:55,130 2 pour y, ce qui signifie que cette valeur y dans cette fonction de exponentiateur 731 00:40:55,130 --> 00:40:56,410 sera cette valeur 2. 732 00:40:56,410 --> 00:41:01,290 Mais je suis de retour cette fonction exponentiateur. 733 00:41:01,290 --> 00:41:05,900 >> Donc, notez ce que dit Swift I ont créé dans ce cas. 734 00:41:05,900 --> 00:41:10,550 laisser place est une définition, il est une fonction qui accepte un double 735 00:41:10,550 --> 00:41:12,610 et renvoie un Double. 736 00:41:12,610 --> 00:41:16,590 Je l'ai créé une fonction que quelque chose de places 737 00:41:16,590 --> 00:41:19,782 en utilisant ce mécanisme ici. 738 00:41:19,782 --> 00:41:22,490 Et vraiment ce qui se passe est qu'il est de retour cette fonction 739 00:41:22,490 --> 00:41:26,390 exponentiateur, mais cette valeur y est enveloppé à l'intérieur. 740 00:41:26,390 --> 00:41:31,080 Et maintenant chaque fois que je l'utilise de cette cette variable ou constante appelée 741 00:41:31,080 --> 00:41:35,180 carré, il ça va à se comporter comme une fonction. 742 00:41:35,180 --> 00:41:39,960 Et donc je peux alors appeler cette variable comme je voudrais appeler une fonction, 743 00:41:39,960 --> 00:41:43,830 et passer dans un certain nombre, comme dans ce cas 3. 744 00:41:43,830 --> 00:41:45,910 Et je puis carré de cette valeur. 745 00:41:45,910 --> 00:41:53,340 Donc 3 carré sera alors 9 devenu, comme on peut le voir ici. 746 00:41:53,340 --> 00:41:56,530 >> Vraiment fou, mais cela maintenant me donne l'occasion 747 00:41:56,530 --> 00:41:59,040 pour créer d'autres fonctions de powerof. 748 00:41:59,040 --> 00:42:03,680 Comme je peux dire, OK, et bien maintenant je veux pour créer une nouvelle fonction, powerof (3), 749 00:42:03,680 --> 00:42:06,290 et stocker que dans un constante appelée cube. 750 00:42:06,290 --> 00:42:10,220 Et maintenant cube va être un fonction distincte qui sera ensuite 751 00:42:10,220 --> 00:42:14,800 prendre une certaine valeur en entrée et cube valeur que nous pouvons voir dans la ligne de fond 752 00:42:14,800 --> 00:42:16,420 ici. 753 00:42:16,420 --> 00:42:18,590 cube de 2 va se traduire par huit. 754 00:42:18,590 --> 00:42:21,330 755 00:42:21,330 --> 00:42:22,680 >> Espérons que des trucs assez soignée. 756 00:42:22,680 --> 00:42:25,920 Vous ne l'avez jamais vu cela auparavant. 757 00:42:25,920 --> 00:42:29,990 Je vous encourage à regarder dans les fermetures et enquêter sur ce un peu plus. 758 00:42:29,990 --> 00:42:33,570 Il ya des choses vraiment puissant, nous voyons beaucoup en JavaScript et quelques autres langues. 759 00:42:33,570 --> 00:42:37,160 Il est vraiment essentiel pour comprendre API ainsi 760 00:42:37,160 --> 00:42:38,620 que nous aurons à juste une seconde. 761 00:42:38,620 --> 00:42:39,456 Oui? 762 00:42:39,456 --> 00:42:43,740 >> PUBLIC: Quand vous faites powerof (2), entre parenthèses, puis 763 00:42:43,740 --> 00:42:48,764 une autre parenthèse, un autre input-- vous êtes essentiellement le remplacement de la place. 764 00:42:48,764 --> 00:42:50,930 DAN AMRMENDARIZ: Alors regardez à la dernière ligne ici. 765 00:42:50,930 --> 00:42:55,930 Il est en fait tout à fait possible à faire chaînage comme vous le suggérez. 766 00:42:55,930 --> 00:43:00,990 Donc powerof (5) signifie que nous allons d'avoir un exponentiateur 5 ici. 767 00:43:00,990 --> 00:43:04,160 Donc, cela est essentiellement va être le même chose que 4 à la cinquième puissance, 768 00:43:04,160 --> 00:43:07,200 parce que nous avons créé une exponentiation fonctionner à la cinquième puissance, 769 00:43:07,200 --> 00:43:09,920 et nous allons passer dans Cette fonction de la valeur 4. 770 00:43:09,920 --> 00:43:12,619 Et nous obtenons cette valeur que nous attendons, 1024. 771 00:43:12,619 --> 00:43:14,785 Public: Et il est pas un nom, donc il est plus facile 772 00:43:14,785 --> 00:43:16,570 à lire, quelle que soit la place. 773 00:43:16,570 --> 00:43:17,903 >> DAN AMRMENDARIZ: Exactement. 774 00:43:17,903 --> 00:43:21,120 Alors avant que je viens de le mettre dans une constante ici, donc 775 00:43:21,120 --> 00:43:23,808 qu'il a fait, il est facile d'utiliser ce nom. 776 00:43:23,808 --> 00:43:24,308 Oui? 777 00:43:24,308 --> 00:43:26,942 >> AUDIENCE: Dans ce contexte, powerof, ça fait partie 778 00:43:26,942 --> 00:43:30,774 du langage de programmation par opposition à la façon dont vous 779 00:43:30,774 --> 00:43:33,952 penser powerof dans [inaudible]? 780 00:43:33,952 --> 00:43:35,660 DAN AMRMENDARIZ: Donc, dans ce cas, powerof 781 00:43:35,660 --> 00:43:39,280 est simplement le nom du fonction que je définis ici. 782 00:43:39,280 --> 00:43:41,801 Donc, il est pas inhérent à la langue elle-même, 783 00:43:41,801 --> 00:43:43,550 mais à la place, il est juste une fonction qui a 784 00:43:43,550 --> 00:43:45,628 ce nom parce que je lui donne ce nom. 785 00:43:45,628 --> 00:43:48,770 786 00:43:48,770 --> 00:43:51,920 D'autres questions? 787 00:43:51,920 --> 00:43:52,800 D'accord. 788 00:43:52,800 --> 00:43:54,750 >> Maintenant, ce qui est excellent. 789 00:43:54,750 --> 00:43:58,170 Mais vous n'êtes pas d'aller voir un beaucoup de fonctions de fermeture que 790 00:43:58,170 --> 00:44:03,440 sont comme ça où vous définissez, à l'intérieur d'une fonction, une autre fonction. 791 00:44:03,440 --> 00:44:04,320 Et vous pouvez le faire. 792 00:44:04,320 --> 00:44:06,430 Mais il est une sorte de pas vraiment nécessaire, non? 793 00:44:06,430 --> 00:44:09,189 Comme pourquoi je définis ce fonction appelée exponentiateur 794 00:44:09,189 --> 00:44:10,480 puis revenir immédiatement. 795 00:44:10,480 --> 00:44:15,220 Pourquoi ne puis-je immédiatement retourner cette fonction? 796 00:44:15,220 --> 00:44:18,890 >> Et en fait, ce sont précisément l'idée derrière un concept appelé 797 00:44:18,890 --> 00:44:22,410 fonctions anonymes, où fonctions anonymes ne sont pas effectivement 798 00:44:22,410 --> 00:44:25,270 avoir un nom parce qu'ils n'a pas besoin d'en avoir un. 799 00:44:25,270 --> 00:44:28,700 Et dans ce cas, dans 7B, nous pouvons trouver précisément cela. 800 00:44:28,700 --> 00:44:31,470 Il est tout de même code, fait exactement la même chose, 801 00:44:31,470 --> 00:44:35,570 mais maintenant nous avons changé légèrement pour que cette fonction de powerof immédiatement 802 00:44:35,570 --> 00:44:37,750 retourne une fonction. 803 00:44:37,750 --> 00:44:44,150 Notez qu'après le retour, il ya une accolade ouverte. 804 00:44:44,150 --> 00:44:46,410 Il est attendant cette entrée Double. 805 00:44:46,410 --> 00:44:48,560 Il est attendant que la production double. 806 00:44:48,560 --> 00:44:52,175 Et puis le mot-clé dans sépare le code lui-même. 807 00:44:52,175 --> 00:44:53,550 Donc, cela est une fonction anonyme. 808 00:44:53,550 --> 00:44:57,030 Il ne possède en fait un nom, considérant que avant il a été appelé exponentiateur. 809 00:44:57,030 --> 00:45:00,229 Mais comme nous l'avons vu, vraiment ne pas se référer à exponentiateur 810 00:45:00,229 --> 00:45:01,270 en dehors de cette fonction. 811 00:45:01,270 --> 00:45:02,470 Donc, il n'a pas d'importance. 812 00:45:02,470 --> 00:45:06,300 Donc, cette fonction est anonyme soi-disant parce qu'il n'a pas de nom, 813 00:45:06,300 --> 00:45:09,107 mais il est encore utilisé dans le contexte de cette position. 814 00:45:09,107 --> 00:45:13,690 815 00:45:13,690 --> 00:45:16,079 >> Les deux prochaines ceux que je suis va continuer espérons 816 00:45:16,079 --> 00:45:17,370 souffler votre esprit un peu. 817 00:45:17,370 --> 00:45:20,410 Nous pouvons simplifier cela encore plus. 818 00:45:20,410 --> 00:45:24,490 Parce que, comme était astucieusement a souligné plus tôt, 819 00:45:24,490 --> 00:45:29,100 peut-être en fait on sait, par déduire de ce code, ce qui 820 00:45:29,100 --> 00:45:31,750 la sortie de ce code va être. 821 00:45:31,750 --> 00:45:38,180 Et en effet, dans cette fonction anonyme, nous pouvons en effet déduire les types de données. 822 00:45:38,180 --> 00:45:41,650 >> Ainsi, dans celui-ci, nous ne sommes plus besoin de définir explicitement 823 00:45:41,650 --> 00:45:44,850 le type de données qui est en cours entrée et la sortie de cette fonction, 824 00:45:44,850 --> 00:45:45,890 pour un couple de raisons. 825 00:45:45,890 --> 00:45:51,390 La première est que nous avons défini, à la place prototype de la fonction d'enceinte, 826 00:45:51,390 --> 00:45:55,770 quel type de données de cette anonymes fonction devrait entrée et de sortie. 827 00:45:55,770 --> 00:45:57,900 Et de l'autre, nous peut déduire le code 828 00:45:57,900 --> 00:46:01,930 ici-bas que nous acceptons entrée qui est du type double 829 00:46:01,930 --> 00:46:03,670 et en renvoyant un double. 830 00:46:03,670 --> 00:46:07,890 >> Notez que nous avons ici ne sont pas explicitement selon les noms des arguments 831 00:46:07,890 --> 00:46:11,220 que cette fonction accepte. 832 00:46:11,220 --> 00:46:16,180 Et ainsi, nous voyons que nous pouvons nous référer à ces paramètres à l'aide de 0 $, 1 $, 833 00:46:16,180 --> 00:46:20,140 ainsi de suite et ainsi de suite, en fonction de le numéro de ce paramètre utilisé 834 00:46:20,140 --> 00:46:20,850 dans cette fonction. 835 00:46:20,850 --> 00:46:23,370 836 00:46:23,370 --> 00:46:29,740 >> Ceci est quelque chose que vous allez pour voir un lot est cette accolade ouverte 837 00:46:29,740 --> 00:46:32,797 définition suivie d'une 0 $, puis une opération, 838 00:46:32,797 --> 00:46:34,130 puis une accolade fermée. 839 00:46:34,130 --> 00:46:38,630 Voilà une fonction anonyme qui effectue cette opération. 840 00:46:38,630 --> 00:46:42,940 Il a de ce paramètre où son type est inféré. 841 00:46:42,940 --> 00:46:44,860 Ce premier paramètre est de 0 $. 842 00:46:44,860 --> 00:46:49,010 Et une opération est passe sur que 0 $. 843 00:46:49,010 --> 00:46:52,100 >> Auditoire: Alors le signe du dollar paramètre signifie essentiellement, 844 00:46:52,100 --> 00:46:53,429 et 0 signifie que la première? 845 00:46:53,429 --> 00:46:54,720 DAN ARMENDARIZ: Exactement. 846 00:46:54,720 --> 00:46:59,100 Alors le signe du dollar signifie fondamentalement paramètre, et 0 signifie que la première. 847 00:46:59,100 --> 00:47:02,760 Mais cela fonctionne précisément dans ce cas où je ne l'ai pas nommé 848 00:47:02,760 --> 00:47:07,940 les arguments de ma fonction anonyme. 849 00:47:07,940 --> 00:47:11,119 >> Public: Est-ce que Perl ou quelque chose ont ce signe de dollar, dollar 0 là-dedans? 850 00:47:11,119 --> 00:47:12,702 DAN ARMENDARIZ: Est-ce que, je suis désolé? 851 00:47:12,702 --> 00:47:15,360 PUBLIC: ce que Perl a ce dollar 0, dollar 1-- 852 00:47:15,360 --> 00:47:17,318 DAN ARMENDARIZ: Je ne suis pas trop familier avec Perl, 853 00:47:17,318 --> 00:47:21,340 mais ce qui définit les variables PHP sur la base de signes de dollar. 854 00:47:21,340 --> 00:47:26,120 Et il peut y avoir certaines langues qui ont des caractéristiques de ce genre. 855 00:47:26,120 --> 00:47:28,240 En fait, Swift emprunte une beaucoup de fonctionnalités comme ce 856 00:47:28,240 --> 00:47:29,489 de beaucoup d'autres langues. 857 00:47:29,489 --> 00:47:32,380 Nous voyons des notes de Python en elle. 858 00:47:32,380 --> 00:47:35,800 Cette définition de Type semble venir de OCaml. 859 00:47:35,800 --> 00:47:38,932 Et nous avons juste un tas de des trucs de beaucoup de langues différentes. 860 00:47:38,932 --> 00:47:40,640 Voilà l'une des belles choses à propos de Swift 861 00:47:40,640 --> 00:47:43,390 est que cela prend beaucoup de la meilleure des idées à partir d'un tas de langues 862 00:47:43,390 --> 00:47:47,229 et tous ensemble Chausse-pieds dans une langue superbe. 863 00:47:47,229 --> 00:47:49,520 En fait, si vous me permettez de continuer à souffler votre esprit, 864 00:47:49,520 --> 00:47:51,000 de sorte que nous avons fait tout cela. 865 00:47:51,000 --> 00:47:56,690 Nous pouvons peut-être simplifier un peu peu à se rendre compte que, bien sûr, 866 00:47:56,690 --> 00:48:02,120 Swift a une exponentiation fonction intégrée. 867 00:48:02,120 --> 00:48:04,660 Si je importer Darwin, qui est tout simplement la bibliothèque 868 00:48:04,660 --> 00:48:09,680 les caractéristiques de cette fonction appelée pow, maintenant Je peux simplifier mon pouvoir de la fonction 869 00:48:09,680 --> 00:48:11,830 comme suit. 870 00:48:11,830 --> 00:48:15,860 Il va être de retour cette fonction anonyme. 871 00:48:15,860 --> 00:48:17,950 >> Mais regardez comment cela est simple maintenant. 872 00:48:17,950 --> 00:48:22,780 Ceci est une fonction anonyme qui est d'accepter un certain type de données, 873 00:48:22,780 --> 00:48:26,600 et il va être l'un argumentation spécifiquement, 874 00:48:26,600 --> 00:48:29,320 référencé à 0 $ qui est de type Double. 875 00:48:29,320 --> 00:48:32,680 Il va retourner un type Double. 876 00:48:32,680 --> 00:48:35,760 Mais la déclaration de retour est maintenant implicite. 877 00:48:35,760 --> 00:48:39,990 >> Et il est exact que ce style est très, très répandue dans Swift, 878 00:48:39,990 --> 00:48:40,790 partout. 879 00:48:40,790 --> 00:48:43,190 Nous allons voir cette tout le temps dans Swift. 880 00:48:43,190 --> 00:48:46,150 Donc, je montre tout cela à vous à cause de cette syntaxe. 881 00:48:46,150 --> 00:48:49,070 Ceci est très fréquent à voir, ce qui signifie qu'il 882 00:48:49,070 --> 00:48:51,420 est une fonction anonyme qui exécute 883 00:48:51,420 --> 00:48:54,640 certaines opérations sur ces arguments. 884 00:48:54,640 --> 00:48:56,940 Et il ya un rendement implicite. 885 00:48:56,940 --> 00:49:01,850 Il est donc absolument la même chose pour nous de dire cela, ici. 886 00:49:01,850 --> 00:49:05,730 887 00:49:05,730 --> 00:49:08,150 >> Parce que ce bouclés le support est une fonction, 888 00:49:08,150 --> 00:49:10,480 nous sommes effectuer cette opération sur le premier argument. 889 00:49:10,480 --> 00:49:12,170 Nous allons le retourner. 890 00:49:12,170 --> 00:49:14,815 Mais ce retour est externe retour cette fonction ensemble, 891 00:49:14,815 --> 00:49:19,855 que toute fonction anonyme que nous venons de créer. 892 00:49:19,855 --> 00:49:21,689 D'autres questions? 893 00:49:21,689 --> 00:49:23,980 Très bien, je ne sais pas si vous les gars êtes prêt pour cela, 894 00:49:23,980 --> 00:49:27,455 mais nous pouvons aller encore plus fou avec Swift. 895 00:49:27,455 --> 00:49:28,560 Tu es prêt? 896 00:49:28,560 --> 00:49:29,930 OK, ce qui est excellent. 897 00:49:29,930 --> 00:49:35,310 >> Maintenant, nous avons en fait la capacité à, à Swift, en raison de la façon modulaire 898 00:49:35,310 --> 00:49:39,650 et comment il est basée sur un protocole, à définir nos propres opérateurs freaking. 899 00:49:39,650 --> 00:49:44,060 Comme dans ce cas, nous avons eu pas opérateur pour exponentiation-- bien, 900 00:49:44,060 --> 00:49:47,990 pour effectuer des pouvoirs de quelque chose. 901 00:49:47,990 --> 00:49:53,632 Mais je ne peux, à Swift, définir une nouvelle opérateur qui fait précisément. 902 00:49:53,632 --> 00:49:55,590 Donc dans ce cas il ya un tas de syntaxe ici. 903 00:49:55,590 --> 00:49:59,980 Et je vais vous permettre de le regardez à la maison quand vous regardez cela. 904 00:49:59,980 --> 00:50:06,890 Mais nous définissons ce infix opérateur, **, ce qui nous permettra ensuite, 905 00:50:06,890 --> 00:50:09,840 en définissant ce que ** effectivement fonction 906 00:50:09,840 --> 00:50:15,010 ne, à accepter une main gauche côté et un côté droit, 907 00:50:15,010 --> 00:50:21,190 puis de retourner l'exposant de cette gauche à la droite. 908 00:50:21,190 --> 00:50:24,850 >> Et maintenant tout d'un coup, je ont créé un nouveau numérateur. 909 00:50:24,850 --> 00:50:29,490 Donc 2 ** 3 signifie 2 à la puissance trois. 910 00:50:29,490 --> 00:50:34,420 [Esprit sain SOUFFLAGE] Ce par elle-même devrait être comme vous, 911 00:50:34,420 --> 00:50:37,960 OK, vis C. Je vais Swift tout le chemin. 912 00:50:37,960 --> 00:50:38,740 C'est bien. 913 00:50:38,740 --> 00:50:40,140 Ceci est assez fantastique. 914 00:50:40,140 --> 00:50:42,240 >> Bien que ce soit un bon exemple. 915 00:50:42,240 --> 00:50:45,570 Mais je dois jamais une fois à l'extérieur cet exemple fait de 916 00:50:45,570 --> 00:50:46,800 défini ma propre opérateur. 917 00:50:46,800 --> 00:50:49,710 Mais encore, il montre une beaucoup de la puissance de Swift 918 00:50:49,710 --> 00:50:54,050 et pourquoi cela est fait vraiment très cool. 919 00:50:54,050 --> 00:50:55,832 OK oui? 920 00:50:55,832 --> 00:50:57,790 Public: Si vous êtes définir votre propre opérateur, 921 00:50:57,790 --> 00:51:02,940 comment savez-vous que vous ne le faites pas accidentellement essayer de créer un opérateur qui est 922 00:51:02,940 --> 00:51:06,040 en quelque part dans C, comme caché quelque part dans Swift, 923 00:51:06,040 --> 00:51:12,210 comme un obscur que vous peut ne pas avoir vu avant. 924 00:51:12,210 --> 00:51:15,050 >> DAN ARMENDARIZ: Donc, si vous essayez de définir vos propres opérateurs, 925 00:51:15,050 --> 00:51:20,970 il existe un risque de définir un sur un opérateur existant. 926 00:51:20,970 --> 00:51:24,870 Cela va dans un niveau de détail Je ne pense pas que nous avons le temps d'aller sur. 927 00:51:24,870 --> 00:51:27,620 Mais cela est un risque. 928 00:51:27,620 --> 00:51:31,320 Et qui est en fait la raison pour laquelle Je ne l'ai pas utiliser le symbole caret, qui 929 00:51:31,320 --> 00:51:36,210 lorsque nous taper pouvoir, nous avons l'habitude utiliser 4 peu caret 5 ou quelque chose 930 00:51:36,210 --> 00:51:40,560 comme ça, juste au moment où nous sommes Gchatting copains ou que ce soit. 931 00:51:40,560 --> 00:51:43,660 Mais dans ce cas, que fait aurait causé une collision. 932 00:51:43,660 --> 00:51:46,450 Et donc je évité ce simplement parce que Je me trouvais à savoir dans ce cas 933 00:51:46,450 --> 00:51:50,430 ce qui ferait que la collision. 934 00:51:50,430 --> 00:51:52,270 >> D'accord. 935 00:51:52,270 --> 00:51:55,080 Maintenant, malheureusement, pour les sept dernières minutes, 936 00:51:55,080 --> 00:51:57,410 Je dois continuer à soufflage vos esprits un peu. 937 00:51:57,410 --> 00:52:00,230 Alors, permettez-moi de vous montrer quelques autres choses aussi. 938 00:52:00,230 --> 00:52:03,710 >> Nous vous avons montré cette idée de ayant ces fonctions anonymes, 939 00:52:03,710 --> 00:52:07,040 ces fermetures qui vous permettent de sorte de passer autour de fonctions. 940 00:52:07,040 --> 00:52:08,100 Vous pouvez les retourner. 941 00:52:08,100 --> 00:52:09,490 Vous pouvez les manipuler. 942 00:52:09,490 --> 00:52:11,790 Vous pouvez faire toutes sortes de trucs dingues. 943 00:52:11,790 --> 00:52:14,850 >> Mais une autre chose qui arrive à être utile 944 00:52:14,850 --> 00:52:19,740 est la capacité à, par opposition à retourner les fonctions 945 00:52:19,740 --> 00:52:25,146 dans une fonction, pour passer d'une fonction en tant que paramètre à une autre fonction. 946 00:52:25,146 --> 00:52:30,430 Vous pourriez être bien pensé pourquoi sur Terre ce que je voudrais faire quelque chose comme ça? 947 00:52:30,430 --> 00:52:33,660 >> Eh bien, disons que je veux de prendre cet opérateur que je 948 00:52:33,660 --> 00:52:40,260 travaillé si dur pour créer et appliquer à tout un tas de différents numéros 949 00:52:40,260 --> 00:52:41,770 dans un tableau. 950 00:52:41,770 --> 00:52:46,700 Donc, dans ce cas, je dois un tableau de integers-- 1, 4, 7, 2, 5, 10, 56. 951 00:52:46,700 --> 00:52:48,080 Et je tiens à les doubler. 952 00:52:48,080 --> 00:52:50,430 La façon dont nous le ferions normalement faire est de simplement écrire 953 00:52:50,430 --> 00:52:53,440 d'une simple boucle for parcourt tous 954 00:52:53,440 --> 00:52:57,140 et d'effectuer une sorte de opération carré sur eux, 955 00:52:57,140 --> 00:53:02,700 entrer ces nouvelles valeurs dans une nouvelle variables, ou plutôt, un nouveau tableau ici. 956 00:53:02,700 --> 00:53:07,370 Et la valeur de la sortie résultat est alors l'ensemble de ces tableaux, 957 00:53:07,370 --> 00:53:10,200 ou plutôt tous ceux éléments maintenant au carré. 958 00:53:10,200 --> 00:53:12,680 >> Et nous pourrions faire la même chose chose pour cubage il, 959 00:53:12,680 --> 00:53:15,360 mais un peu sonnette d'alarme devrait aller au large 960 00:53:15,360 --> 00:53:17,360 disant que peut-être il ya d'une certaine façon que nous le ferions 961 00:53:17,360 --> 00:53:19,860 être en mesure de simplifier un peu cette question. 962 00:53:19,860 --> 00:53:21,130 Et en fait il est. 963 00:53:21,130 --> 00:53:25,320 Et si nous pouvions créer une fonction qui nous permet 964 00:53:25,320 --> 00:53:28,350 à accepter, comme un prédateur, une fonction? 965 00:53:28,350 --> 00:53:30,350 Donc dans ce cas, prendre un regarder ces arguments. 966 00:53:30,350 --> 00:53:33,220 Nous allons accepter une liste de doubles. 967 00:53:33,220 --> 00:53:35,030 Et puis nous allons d'accepter une fonction 968 00:53:35,030 --> 00:53:40,990 dans une variable appelée f qui va de prendre un double et retourner un double. 969 00:53:40,990 --> 00:53:43,320 Et toute sortie de cette fonction entière 970 00:53:43,320 --> 00:53:47,310 appelé mappeur va retourner un tableau appelé double. 971 00:53:47,310 --> 00:53:52,380 >> Qu'est-ce que ce serait alors me permettre de faire est de parcourir cette liste 972 00:53:52,380 --> 00:53:56,350 et faire la même chose, mais maintenant appliquer cette fonction sur chaque 973 00:53:56,350 --> 00:53:58,970 des valeurs individuelles dans cette liste. 974 00:53:58,970 --> 00:54:00,750 Donc, je ne sais pas vraiment ce que f est. 975 00:54:00,750 --> 00:54:02,010 Il n'a pas d'importance pour moi. 976 00:54:02,010 --> 00:54:06,530 Mais tant qu'il prend dans un double, effectue une opération sur elle, 977 00:54:06,530 --> 00:54:08,640 et renvoie alors une Double, je serais alors 978 00:54:08,640 --> 00:54:13,415 capable de cartographier cette fonction à travers chaque élément dans la liste. 979 00:54:13,415 --> 00:54:16,270 980 00:54:16,270 --> 00:54:20,930 >> Et ce type de programmation est appelées fonctions d'ordre supérieur, 981 00:54:20,930 --> 00:54:24,440 où nous sommes fonctions passant en tant que paramètres autour 982 00:54:24,440 --> 00:54:26,430 et faire des choses avec des fonctions. 983 00:54:26,430 --> 00:54:29,640 Il est un peu comme prendre tous ces idées que nous avons apprises dans CS50 984 00:54:29,640 --> 00:54:31,390 et de les prendre tri d'au prochain niveau. 985 00:54:31,390 --> 00:54:34,140 Et cela est tous les trucs de style CS51. 986 00:54:34,140 --> 00:54:37,080 Et donc nous allons aller en profondeur plus dans les classes comme ça. 987 00:54:37,080 --> 00:54:38,930 >> Mais cela est également importante ici parce que nous 988 00:54:38,930 --> 00:54:42,010 voir beaucoup de fonctions qui sont utilisés dans Swift 989 00:54:42,010 --> 00:54:45,590 est-ce que l'essentiel ci, où nous avons 990 00:54:45,590 --> 00:54:48,300 quelques chiffres, une certaine tableau de nombres. 991 00:54:48,300 --> 00:54:50,850 Nous allons passer cette tableau dans notre mappeur. 992 00:54:50,850 --> 00:54:55,770 Et nous allons aussi passer quelque fonction, qui 993 00:54:55,770 --> 00:54:57,950 nous avons déjà défini ici. 994 00:54:57,950 --> 00:54:59,690 Ça va être carré. 995 00:54:59,690 --> 00:55:02,220 Et nous allons ensuite quadrature tous ces numéros 996 00:55:02,220 --> 00:55:04,710 et stocker que dans ce résultat ici. 997 00:55:04,710 --> 00:55:07,280 998 00:55:07,280 --> 00:55:11,000 >> Donc ce cas, nous avons défini notre propre fonction appelé mappeur. 999 00:55:11,000 --> 00:55:15,370 Mais cette chose est exacte, en fait, intégré dans Swift. 1000 00:55:15,370 --> 00:55:18,960 Il existe une variété de fonctions appelées carte. 1001 00:55:18,960 --> 00:55:21,520 Il ya une fonction de carte, il ya une diminution de la fonction, 1002 00:55:21,520 --> 00:55:25,630 et il ya une fonction de filtre, qui applique essentiellement des fonctions 1003 00:55:25,630 --> 00:55:30,782 pour chaque élément dans un la liste de les modifier de quelque façon. 1004 00:55:30,782 --> 00:55:34,510 >> Auditoire: Alors, puisque vous transformez les données dans un autre format 1005 00:55:34,510 --> 00:55:36,134 à travers un function-- 1006 00:55:36,134 --> 00:55:37,050 DAN ARMENDARIZ: Droit. 1007 00:55:37,050 --> 00:55:39,420 Ouais, donc la fonction que nous acceptons 1008 00:55:39,420 --> 00:55:41,790 est la transformation des données d'une certaine façon. 1009 00:55:41,790 --> 00:55:44,700 Dans ce cas, nous étions soit quadrature, ou nous étions cubage il, 1010 00:55:44,700 --> 00:55:50,060 ou vraiment, nous pourrions effectuer aucune opération sur du tout. 1011 00:55:50,060 --> 00:55:54,150 >> Mais laissez-moi vous montrer comment cette va chercher dans la pratique. 1012 00:55:54,150 --> 00:55:56,681 Et encore, je suis à court d'un peu de temps. donc je ne suis pas 1013 00:55:56,681 --> 00:55:59,430 va être en mesure d'aller sur l'ensemble du code source en détail ici. 1014 00:55:59,430 --> 00:56:00,721 Mais je vous encourage à le faire. 1015 00:56:00,721 --> 00:56:03,850 Nous publierons dès que possible après ce discours. 1016 00:56:03,850 --> 00:56:07,610 >> Mais si vous jetez un oeil à cela, supposons que nous avons une liste de numéros, 1017 00:56:07,610 --> 00:56:10,260 un tableau de nombres en ce variables numéros appelés. 1018 00:56:10,260 --> 00:56:16,670 Ensuite, nous voulons effectuer cette opération de filtrage sur ces chiffres. 1019 00:56:16,670 --> 00:56:19,730 Donc filtre est un plus la fonction de commande qui 1020 00:56:19,730 --> 00:56:24,660 accepte un tableau et également une fonction. 1021 00:56:24,660 --> 00:56:28,760 Et sur chaque élément de ce tableau, il exerce cette fonction. 1022 00:56:28,760 --> 00:56:31,990 >> Si cette fonction retourne vrai, il garde cet élément. 1023 00:56:31,990 --> 00:56:36,100 Si cette fonction retourne false, il jette ce point. 1024 00:56:36,100 --> 00:56:40,480 Et puis elle retourne une liste qui se compose alors tous 1025 00:56:40,480 --> 00:56:44,360 de ces éléments qui ont été filtrés. 1026 00:56:44,360 --> 00:56:47,150 >> Donc, en d'autres mots, cela est la même idée, le carnet de notes. 1027 00:56:47,150 --> 00:56:50,800 On peut avoir une variété de qualités dans ce numéros de valeur appelé. 1028 00:56:50,800 --> 00:56:55,590 Peut-être 100, et 70, et 40, ainsi de suite et ainsi de suite. 1029 00:56:55,590 --> 00:56:59,110 Qu'est-ce que ce filtre ne constitue un avis que ce soit que le sucre syntaxique 1030 00:56:59,110 --> 00:57:01,310 pour une fonction anonyme. 1031 00:57:01,310 --> 00:57:05,980 Ceci est une fonction anonyme disant que le paramètre que je suis d'accepter 1032 00:57:05,980 --> 00:57:09,690 va être, si elle est supérieur à 70, 1033 00:57:09,690 --> 00:57:15,837 alors ce sera return true, ce qui signifie que cet élément sera conservée dans ce filtre. 1034 00:57:15,837 --> 00:57:17,920 Alors, soyons un peu plus concrète à ce sujet. 1035 00:57:17,920 --> 00:57:25,760 Si je dois ce tableau de nombres et il se compose de 100, 70 et 40, 1036 00:57:25,760 --> 00:57:29,730 Je effectuer ce filtre une opération sur chacun de ceux-ci. 1037 00:57:29,730 --> 00:57:33,270 Alors que première est cette valeur de 100. 1038 00:57:33,270 --> 00:57:36,770 100 supérieur ou égal 70 est vrai, ce qui 1039 00:57:36,770 --> 00:57:41,950 signifie que 100 est maintenu en cette nouvelle copie de ce tableau. 1040 00:57:41,950 --> 00:57:44,290 70 passe aussi. 1041 00:57:44,290 --> 00:57:46,020 Mais 40 ne fait pas. 1042 00:57:46,020 --> 00:57:54,290 Donc ce qui est retourné dans passingCount est la matrice d'éléments 100 et 70-- 1043 00:57:54,290 --> 00:57:57,410 100, virgule, 70. 1044 00:57:57,410 --> 00:57:59,870 Ce sont les deux seuls éléments qui ont été conservés. 1045 00:57:59,870 --> 00:58:03,740 Et si la raison je suis allé rapidement à travers beaucoup de ce genre de d'ordre élevé 1046 00:58:03,740 --> 00:58:08,680 les choses sont parce que ce qui est commun chose que vous verrez à Swift jolie 1047 00:58:08,680 --> 00:58:16,810 fréquemment, est d'effectuer une opération en utilisant la syntaxe de cette fonction anonyme. 1048 00:58:16,810 --> 00:58:18,450 >> Il ya des trucs cool. 1049 00:58:18,450 --> 00:58:24,730 Les commutateurs sont vraiment puissant à Swift, Je veux dire simplement comme un fou, fou puissant. 1050 00:58:24,730 --> 00:58:28,250 Vous pouvez utiliser le commutateur, et vous pouvez réellement les appliquer 1051 00:58:28,250 --> 00:58:33,160 à des plages, ce qui est un peu fou, et faire des trucs de fantaisie comme ça. 1052 00:58:33,160 --> 00:58:37,540 >> Mais dans les dernières minutes, Je veux pour avancer assez loin 1053 00:58:37,540 --> 00:58:46,940 et vous montrer un exemple concret de la façon dont nous pouvons créer dans iOS utilisant Swift. 1054 00:58:46,940 --> 00:58:49,040 Alors, quand vous faites cela, vous aurez à prendre 1055 00:58:49,040 --> 00:58:51,990 un regard at-- sur Apple la documentation, ils 1056 00:58:51,990 --> 00:58:56,084 avoir un grand nombre de très bons didacticiels pour la création de votre première application. 1057 00:58:56,084 --> 00:58:58,250 Et je vous encourage à faire que parce qu'ils vous prennent 1058 00:58:58,250 --> 00:59:04,110 à travers toutes les étapes de ce qu'est exactement à cliquez sur pour créer une application iOS. 1059 00:59:04,110 --> 00:59:07,290 >> Mais ici, nous avons cette app iOS. 1060 00:59:07,290 --> 00:59:10,960 Et il est une application assez simple en fait. 1061 00:59:10,960 --> 00:59:13,840 Si je lance ce, permettez-moi de montrer vous à quoi il ressemble. 1062 00:59:13,840 --> 00:59:19,480 Tout ce qu'il fait essentiellement est-il tire de l'Internet un fichier JSON 1063 00:59:19,480 --> 00:59:22,300 que je l'ai stocké sur un serveur. 1064 00:59:22,300 --> 00:59:26,310 Et ce fichier JSON définit images qui permettent 1065 00:59:26,310 --> 00:59:31,680 je puis parcourir, sur mon application, les images de mon serveur web. 1066 00:59:31,680 --> 00:59:32,880 >> Donc je dois ici getNextImage. 1067 00:59:32,880 --> 00:59:37,100 Il charge une image à partir d'Internet, puis affiche sur l'écran. 1068 00:59:37,100 --> 00:59:38,200 >> Donc, il est assez simple. 1069 00:59:38,200 --> 00:59:41,550 Mais le but ici est de montrer comment nous pouvons combiner les choses 1070 00:59:41,550 --> 00:59:47,820 des quelques dernières semaines de CS50 dans une application réelle iOS. 1071 00:59:47,820 --> 00:59:53,140 En d'autres termes, peut-être le choses que vous voulez faire 1072 00:59:53,140 --> 00:59:56,340 est d'avoir une application iOS que peuvent extraire des données à partir d'Internet 1073 00:59:56,340 --> 00:59:59,070 et montrer à l'utilisateur des informations. 1074 00:59:59,070 --> 01:00:03,130 Cela est tout à fait le point de ce code source ici. 1075 01:00:03,130 --> 01:00:07,890 >> Donc, il ya beaucoup à dire sur comment faire développement réel iOS. 1076 01:00:07,890 --> 01:00:12,860 Il ya beaucoup de syntaxe fou que nous avons pas tout à fait encore vu 1077 01:00:12,860 --> 01:00:15,580 comme une classe, ce qui est en fait une classe. 1078 01:00:15,580 --> 01:00:19,470 Nous pouvons largement ignorer que, pour le moment. 1079 01:00:19,470 --> 01:00:23,250 >> Mais remarquons que nous avons contenue dans ce une variété de choses 1080 01:00:23,250 --> 01:00:27,720 que nous avons déjà vu comme fonctions qui ont des noms spécifiques. 1081 01:00:27,720 --> 01:00:32,650 Et lorsque nous donnons ceux fonctions les noms corrects 1082 01:00:32,650 --> 01:00:36,530 qui sont attendus pour iOS, en fait, cela se sent un peu magique. 1083 01:00:36,530 --> 01:00:40,300 Mais lorsque vous créez un application iOS, il 1084 01:00:40,300 --> 01:00:47,590 sont des noms de fonctions spécifiques sont appelés par le téléphone lui-même 1085 01:00:47,590 --> 01:00:52,440 que l'application se charge d'essayer pour créer le processus qui fait 1086 01:00:52,440 --> 01:00:54,787 exécute votre application. 1087 01:00:54,787 --> 01:00:58,120 Encore une fois, il ya beaucoup de choses que je avoir à passer sous silence ici pour que nous 1088 01:00:58,120 --> 01:01:00,570 pour parler de ce particulier. 1089 01:01:00,570 --> 01:01:06,050 Mais je vous encourage à regarder peut-être l'autre séminaire iOS, mais aussi certains 1090 01:01:06,050 --> 01:01:09,290 de l'tutoriels en ligne qui ne un bien meilleur travail de décrire 1091 01:01:09,290 --> 01:01:11,030 les informations spécifiques. 1092 01:01:11,030 --> 01:01:15,760 >> Mais nous pouvons voir un couple de choses qui sont intéressants à partir du code ici. 1093 01:01:15,760 --> 01:01:17,950 Notez que nous avons si les états. 1094 01:01:17,950 --> 01:01:20,400 Soit dit en passant, une importante chose à propos de si les états 1095 01:01:20,400 --> 01:01:24,860 est que les parenthèses autour de la Expression booléenne sont facultatifs. 1096 01:01:24,860 --> 01:01:30,800 Mais les accolades ne sont pas facultatifs, quel que soit le ou peu nombreuses lignes de code 1097 01:01:30,800 --> 01:01:32,360 vous avez dans une instruction if. 1098 01:01:32,360 --> 01:01:38,670 Vous ne pouvez pas avoir un si les états sans accolades dans Swift. 1099 01:01:38,670 --> 01:01:41,000 >> Et cela est, bien, sorte de stupide. 1100 01:01:41,000 --> 01:01:43,910 Mais il ya des raisons historiques à cela. 1101 01:01:43,910 --> 01:01:46,180 Il est censé pour vous sauver de vous-même. 1102 01:01:46,180 --> 01:01:49,899 Vous aimez cette par exemple, vous ne pouvez pas éliminer les accolades autour de ce 1103 01:01:49,899 --> 01:01:50,440 if. 1104 01:01:50,440 --> 01:01:52,730 Ceux-ci sont en fait nécessaires. 1105 01:01:52,730 --> 01:01:54,480 Je vous encourage donc à regarde ça. 1106 01:01:54,480 --> 01:01:56,230 Mais il ya un plus construis que je veux 1107 01:01:56,230 --> 01:02:02,640 vous montrer à propos de Swift que est de nouveau à Swift 2.0 rapport 1108 01:02:02,640 --> 01:02:08,460 pour les anciennes versions de Swift, qui est le suivant. 1109 01:02:08,460 --> 01:02:11,620 Voyons où ai-je mis ici? 1110 01:02:11,620 --> 01:02:16,630 >> Donc, dans cette fonction appelée fetchJSON, cette fonction 1111 01:02:16,630 --> 01:02:23,450 est responsable de la traction que JSON déposer partir d'une URL, qui se trouve juste 1112 01:02:23,450 --> 01:02:26,310 être en cours d'exécution sur mon CS50 IDE. 1113 01:02:26,310 --> 01:02:28,580 Je viens de commencer Apache, mettre mon fichier JSON là, 1114 01:02:28,580 --> 01:02:32,110 et je suis en mesure de tirer alors que les données de l'Internet à l'aide 1115 01:02:32,110 --> 01:02:36,430 cette fonction et cette URL, qui est fourni par le téléphone. 1116 01:02:36,430 --> 01:02:40,490 Elle est fournie par un bibliothèque que vous utilisez lorsque 1117 01:02:40,490 --> 01:02:43,140 vous faites un certain développement de l'application iOS. 1118 01:02:43,140 --> 01:02:49,690 >> Notez ici qu'il ya cette inhabituelle construction syntaxique appelé garde. 1119 01:02:49,690 --> 01:02:53,530 Et vraiment tout cela est en Swift est un moyen de vérifier 1120 01:02:53,530 --> 01:02:56,870 que certaines choses ont été remplies avant 1121 01:02:56,870 --> 01:03:00,000 procéder avec le reste de la fonction. 1122 01:03:00,000 --> 01:03:04,260 Donc, je pouvais avoir, en utilisant ce type en option, 1123 01:03:04,260 --> 01:03:10,530 Je pourrais ai trouvé l'URL par l'exécution de cette fonction NSURL 1124 01:03:10,530 --> 01:03:16,640 et stocker que dans une URL constante, puis en vérifiant 1125 01:03:16,640 --> 01:03:20,820 pour voir si l'URL est nul, parce qu'il allait revenir un type optionnel. 1126 01:03:20,820 --> 01:03:25,660 Et si elle était nulle, alors je serais imprimer une erreur et revenir ensuite. 1127 01:03:25,660 --> 01:03:29,970 >> Mais à la place, ce qui permet de garde nous faisons est que chose de très, 1128 01:03:29,970 --> 01:03:34,550 mais assurez-vous qu'il est effectivement le cas que url 1129 01:03:34,550 --> 01:03:38,020 a été correctement fixé par NSURL. 1130 01:03:38,020 --> 01:03:41,810 Et si elle est, alors il saute sur cela, et il 1131 01:03:41,810 --> 01:03:46,110 vous permettra de procéder à URL ayant été correctement défini. 1132 01:03:46,110 --> 01:03:48,830 Mais si cela est le cas que URL ne sont pas correctement défini, 1133 01:03:48,830 --> 01:03:52,550 Si cette fonction renvoie une erreur ou quelque chose d'autre inattendue 1134 01:03:52,550 --> 01:03:58,030 se produit effectivement, ce garde construction nous permet de sortir ensuite via cette erreur 1135 01:03:58,030 --> 01:04:00,390 et de revenir immédiatement. 1136 01:04:00,390 --> 01:04:00,890 Oui? 1137 01:04:00,890 --> 01:04:04,839 >> AUDIENCE: Donc, il est genre des comme un if then else? 1138 01:04:04,839 --> 01:04:07,130 DAN ARMENDARIZ: Il est une sorte de comme un if then else, oui, 1139 01:04:07,130 --> 01:04:14,200 sauf que cette URL est alors défini ci-dessous pour tout cela. 1140 01:04:14,200 --> 01:04:20,420 Si elle passe cette garde, alors il seront effectivement rempli avec des données 1141 01:04:20,420 --> 01:04:29,500 et le restant utilisable dans code source dans votre fonction. 1142 01:04:29,500 --> 01:04:33,790 Donc, je pense que vous allez commencer à voir cette garde ainsi. 1143 01:04:33,790 --> 01:04:36,670 Et être conscient de cela. 1144 01:04:36,670 --> 01:04:46,270 >> Il suffit donc de regarder un couple d'autres les choses, ce droit est ici ce qui, 1145 01:04:46,270 --> 01:04:53,377 pensez-vous, juste, fondée sur ce que nous parlions avant? 1146 01:04:53,377 --> 01:04:56,650 >> AUDIENCE: Pense qu'il va courir dans la liste? 1147 01:04:56,650 --> 01:04:59,100 >> DAN ARMENDARIZ: Alors qui est proche. 1148 01:04:59,100 --> 01:05:02,360 Ceci est une fonction que nous définissons. 1149 01:05:02,360 --> 01:05:07,240 Et nous sommes Saisie cette fonction comme un argument à cette fonction ici. 1150 01:05:07,240 --> 01:05:09,120 >> AUDIENCE: [inaudible], voire nulle. 1151 01:05:09,120 --> 01:05:11,470 Donc, il est dans la liste, non? 1152 01:05:11,470 --> 01:05:15,450 >> DAN ARMENDARIZ: Si l'erreur est non nul, de sorte que est-- donc je dois faire défiler. 1153 01:05:15,450 --> 01:05:18,060 Eh bien, voyons, je ne peux pas vraiment défiler vers la droite ici. 1154 01:05:18,060 --> 01:05:23,161 erreur est un argument qui est en cours passé à cette fonction anonyme. 1155 01:05:23,161 --> 01:05:24,410 Ceci est une fonction anonyme. 1156 01:05:24,410 --> 01:05:25,480 Il n'a pas de nom. 1157 01:05:25,480 --> 01:05:29,850 Mais nous acceptons ces trois arguments, les données, réponse et les erreurs. 1158 01:05:29,850 --> 01:05:33,590 Et il va retourner void, alors il ne va rien retourner. 1159 01:05:33,590 --> 01:05:37,910 Et ceci est le contenu de cette fonction. 1160 01:05:37,910 --> 01:05:41,961 Et puis, nous avons accès à l'intérieur qui fonction pour chacun de ces arguments. 1161 01:05:41,961 --> 01:05:45,650 1162 01:05:45,650 --> 01:05:48,679 >> Donc, il est un tourbillon Visite de la langue. 1163 01:05:48,679 --> 01:05:50,470 Mais je l'espère avec cela, espérons que vous prenez 1164 01:05:50,470 --> 01:05:54,490 un regard sur certains des tutoriels spécifique au développement iOS avec Swift, 1165 01:05:54,490 --> 01:05:57,481 surtout si vous allez à Développeur web de page-- d'Apple 1166 01:05:57,481 --> 01:05:59,980 ils ont beaucoup de vraiment bon tutoriels pour vous aider à démarrer. 1167 01:05:59,980 --> 01:06:05,010 Mais espérons juste cette heure de parler sur la syntaxe elle-même a donné 1168 01:06:05,010 --> 01:06:08,760 vous assez pour commencer avec cela. 1169 01:06:08,760 --> 01:06:12,950 >> Nous afficherons tous de cette source code sur le site du séminaire 1170 01:06:12,950 --> 01:06:17,800 dès que possible, et aussi les diapositives si vous avez une référence pour tous ceux. 1171 01:06:17,800 --> 01:06:20,530 Mais bonne chance avec vos projets. 1172 01:06:20,530 --> 01:06:23,640 Et je vous remercie tous d'être venus. 1173 01:06:23,640 --> 01:06:26,990 >> [APPLAUDISSEMENTS] 1174 01:06:26,990 --> 01:06:28,026