[Jouer de la musique] DAN AMRMENDARIZ: Tout le monde, accueillir le séminaire de CS50, iOS App développement avec Swift. Je suis Dan Armendariz, et je suis un précepteur de l'informatique ici à Harvard. Et la prochaine heure va être une visite éclair de autant trucs sur ce sujet que nous pouvons adapter. Je vais poster la totalité du code source que vous verrez aujourd'hui en ligne. Nous pourrions ne pas être en mesure de effectivement aller sur tout que je suis ce que je suis vous montrant en cette heure. Mais au moins, je l'espère grâce les commentaires du code source, vous serez en mesure d'essayer de comprendre ce qui qui se passe exactement pour ces choses que nous ne recevons pas assez. Dans l'ensemble, la structure de La discussion d'aujourd'hui sera comme suit. Nous allons commencer à faire un peu de base syntaxe de la langue Swift, entrer dans une partie de la plus avancée syntaxe du langage Swift. Parce que la langue est très moderne et il a beaucoup de haut niveau caractéristiques, choses que nous avons pas vu en C tout au long de CS50, ou Même certains des autres langues que nous avons commencé en utilisant dans CS50 comme PHP, donc je vais devoir essayer de introduisent également certains sujets qui sont liés à la hausse des langages de haut niveau que vous ne pouvez pas voir en profondeur dans CS50, mais vous verrez plus tard cours d'informatique. Donc, ça va être un serrés heures. Et s'il vous plaît sentir libre de me laisser savoir si vous avez des questions. Donc, si vous êtes intéressé à faire du développement avec Swift, ou vraiment tout développement d'application iOS, il ya un couple d'exigences. Tout d'abord, vous devez être à l'aide un Mac, en cours d'exécution dans les exemples que nous allons utiliser aujourd'hui, relativement nouvelle version de l'OS X. Dans ce cas, je suis X 10.5 courir. Vous pouvez exécuter 10.11 si vous voulez. Mais tout ce que vous allez voir impliquant Xcode est 7 et plus tard, qui présente la dernière version de Swift, qui est Swift 2.0. Ceci est en fait une jolie distinction importante. A beaucoup de la syntaxe a changé assez significativement dans certains cas, de Swift 1.0, qui a été publié l'année dernière, Swift à 2,0, ce qui vient de sortir cet automne. Donc, nous allons montrer Swift 2.0. Un grand nombre des choses qui vous recherchez en ligne lorsque vous essayez d'obtenir supplémentaires informations sur une variété de choses, vous pouvez explicitement rechercher Swift 2 plutôt que de tout simplement vieux Swift à faire assurer que vous obtenez la syntaxe correcte. En fait, cela est généralement vrai. Il ya une quantité de développement rapide passe dans la langue Swift depuis Apple a publié, je pense ce qui, il a été un peu plus d'un an en ce moment. Et les choses ont changé de façon spectaculaire en ce moment. Et il ne faut pas être frustré si, lorsque vous êtes à la recherche autour de pour les sujets Swift ou la façon d'accomplir quelque chose en utilisant quelques exemples de code ou quelque chose qu'il ne travailler réellement sur Swift 2.0. Assurez-vous que vous êtes à la recherche spécifiquement pour cette version pour essayer de minimiser les effets de différents versions et ces sortes de choses. Je vais essayer de souligner juste quelques choses qui sont différents aux anciennes versions. Mais il est quelque chose à surveiller. Cela va probablement être un des plus grands maux de tête que vous aurez avec SWIFT est de trouver exemple de code qui est plus âgé, même juste de quelques mois, en essayant d'utiliser dans votre projet plus moderne. Et ce tout simplement ne fonctionne pas. Vous obtenez des erreurs de compilation, de la syntaxe les erreurs, toutes sortes de trucs dingues. Il suffit donc d'être patient avec cela, et nous espérons, avoir une assez bonne expérience avec l'ensemble Swift. Maintenant, vous pouvez réellement join-- et je l'espère nous avons toujours cette réalité cette année-- CS 50 d'application d'Apple équipe de développement, qui vous permettra d'installer des applications que vous créez sur vos appareils iOS. Alors jetez un oeil à cette adresse URL si vous êtes intéressé à le faire. Donc, juste un couple de choses à propos de lui-même. Swift Il est un langage compilé. Mais vous verrez que certains des caractéristiques que nous utilisons lui permettent d'être utilisé aussi dans un peu interprété comme une façon aussi. A beaucoup de la syntaxe est empruntée de C. Il est basé et écrit en C. Et donc nous allons voir que il ya beaucoup de plats à emporter à partir de vos connaissances de C que nous pouvons port à Swift. Mais il ya des choses qui rendre très différente de C. Il est très fortement typé. Il ya la gestion automatique de la mémoire. Tu ne vas pas avoir à utiliser malloc ou n'importe où gratuitement. Il est conçu pour généralité. Donc, en d'autres termes, vous pouvez l'utiliser dans toutes sortes de contextes, de Apple Suivre à l'iPhone tout le chemin jusqu'à OS X, et même certains serveurs, même certains scripts. Mais nous verrons que le support pour les scripts est pas encore là que il est dans d'autres langues. Donc plus probable que vous serez à l'aide ce exclusivement pour le développement sur votre Mac ou votre iPhone. Et il a beaucoup de caractéristiques modernes. Et beaucoup de ces choses sont des choses qui nous allons essayer de répondre aujourd'hui, mais aussi nos sujets que franchement, nous pouvons consacrer des cours entiers. En fait, CS 51, qui est prochain semestre offert, se concentre beaucoup sur ces sujets qui sont décrits ci-dessous. Ainsi, vous pouvez passer un semestre entier comprendre ces choses. Mais nous allons essayer pour obtenir à travers eux au moins assez que vous peut comprendre ce qui est passe quand vous regardez à un programme Swift et être en mesure de pirater votre chemin à travers elle pour le projet final. Maintenant, l'une des meilleures façons que vous pouvez obtenir des informations supplémentaires sur ce est franchement juste par Apple fourni de la documentation de Swift. Il ya beaucoup d'API qui sont disponibles. Et cela est une bonne base de départ pour vous à chercher, des choses spécifiques que vous voulez faire avec une API impliquant iOS. Si vous voulez utiliser l'appareil photo pour exemple, vous pouvez commencer à chercher ici, et également utiliser Google et Stack Débordement comme vous le feriez normalement. Des questions sur cette avant de sauter à droite? D'accord. Passons. Alors d'abord, je dois une nombre de fichiers d'exemple. Et je vais essayer de l'étape à travers eux relativement rapidement. Ceci est le fichier Bonjour tout le monde pour Swift. C'est très simple. Il ya beaucoup plus de commentaires qu'il ya de code réel. Notez que le code réel est à en bas sur la ligne 14. Il dit impression. Et puis il est un appel de fonction. Nous passons dans une chaîne appelée Bonjour CS50. Notez qu'il n'y a pas de points-virgules. Notez qu'il n'y a aucun principale int. Il ya rien de la cochonneries que nous avons eu avec C. Lorsque nous utilisons Swift de cette manière, qui est simplement écrit dans un fichier texte et stockées sur mon ordinateur, puis Je peux le compiler et l'exécuter. Remarquez que je suis ici ne pas utiliser l'IDE CS50. Cela suppose que je suis la course et que je suis sur OS X, et que je l'ai déjà installé Xcode sur cette machine pour que cette en fait pour fonction. Mais cela est juste un fichier texte normal que nous puissions ensuite compiler et modifier. Donc, nous allons voir comment cela fonctionne réellement. Que faire si je veux compiler? 1.swift swiftc. Après une minute ou deux, il verra que nous avons maintenant compilé ce dans un fichier appelé 1. Et maintenant, nous avons imprimé notre CS50, notre application Bonjour tout le monde, plutôt. Remarquez une autre chose que ainsi est que, par défaut, nous ne devons entrée a / n pour imprimer une nouvelle ligne. Par défaut, la fonction d'impression dans Swift va imprimer une nouvelle ligne pour vous. Vous pouvez passer d'une option supplémentaire paramètre pour lui dire de ne pas le faire. Mais Google pour plus d'informations à ce sujet. Par défaut, il fera la ligne d'impression. Très bien, alors passons puis à d'autres choses. Alors, comment pouvons-nous définir des variables effectivement? Nous pouvons le faire est à l'aide l'une des deux méthodes. Et celui que je tiens à vous dire à propos de la première est cette définition let. Et cela est important car effectivement ce que nous faisons est de définir une constante. Nous allons créer une variable, ou plutôt un appelé nom de la constante, fournir à elle dans certaines data-- ce cas, la chaîne Dan. Mais en utilisant cette let mot-clé, nous disons que cette variable-- ou constant-- nouveau appelé nom ne va jamais être changé. Ça va être immuable tout au long la durée du programme ou tout au long de la la durée de contexte que cette variable est disponible. Ceci est très important que lorsque vous avez des données qui ne sont pas va changer dans votre programme, et vous verrez une variété d'exemples quand nous voulons utiliser laissez contre l'autre syntaxe, il est important que vous utiliser let chaque fois que possible, car cette notifie la langue qu'il est ne va pas être changé, et il peut effectivement effectuer beaucoup d'optimisations pour améliorer la vitesse et la sécurité de votre programme. Et par la sécurité, je veux dire pas laissé il accident avec des erreurs folles que nous soyons habitué à voir en C. Ensuite, nous pouvons utiliser interpolation de chaîne pour encapsuler ce dans une chaîne. Donc, nous pouvons voir dans cette ligne d'impression, imprimer bonjour, puis en utilisant des barres obliques inverses parens ouvertes, puis le nom de ma variable, dans ce cas constante, fermer les parenthèses. Je essentiellement en mettant ensuite le contenu de cette variable appelée name l'intérieur de la chaîne, puis imprimer le résultat là-bas. Il ya un autre changement à ce fichier qui est ce que je dois, tout en haut, mettre dans une ligne de tralala, qui essentiellement spécifie simplement que je veux utiliser le Swift interprète, qui signifie que je ne dois plus compiler ce programme particulier. Je peux juste courir comme son propre script. Mais cela est, dans ce cas, derrière les scènes en cours de compilation, puis en cours d'exécution. Il est juste invisible pour nous. Très bien, alors passons. Donc, il ya un peu de tricherie qui vient de se passer avant. Je vous ai montré que je pourrait définir une constante. Et je pourrais fournir des données pour le faire. Mais dans ce cas, remarque que je ne l'ai pas effectivement spécifier le type de données c'est tout. Et cela est parce que le compilateur, SWIFT peut déduire le type de données juste, fondée sur les données que je mets dedans. Parce qu'il sait que par l'évaluation de cette la variable ici, ce droit de données ici, elle sait qu'elle est une chaîne. Et si ce nom est donc constante va être une chaîne aussi. Mais nous pouvons aussi être explicite sur le type qui est nous allons utiliser pour constantes ou des variables en utilisant cette syntaxe instead-- laissez nom colon chaîne est égale Dan, qui dans ce cas signifie que nous sommes va définir un nom appelé constante. Ça va être du type chaîne. Et la valeur va être Dan. Maintenant, l'autre manière que nous pouvons créer variables-- et ceux-ci sont des variables modifiables, qui signifie que nous sommes, en fait, allons de changer leur contenu parfois dans le contexte de la durée que cette variable est defined-- nous utiliser le mot-clé var au lieu de laisser faire. Mais encore une fois, par défaut, sauf si vous savez que vous devez manipuler ces données, essayer d'utiliser pour laisser des améliorations de performances. Dans ce cas, je peux alors spécifier le type de données que nous nous attendons à être à l'intérieur du cette nouvelle variable appelée étiquette. Ça va être une chaîne. Et nous allons ensuite concaténer deux chaînes ensemble, la chaîne bonjour, et la chaîne représentée par le variables, ou plutôt le nom de la constante. Donc, que ce soit agréable parce que ce est un peu comme dans PHP que nous avoir très facile concaténation de chaîne. Nous ne devons pas automatiquement utiliser toute sorte de gestion de la mémoire d'augmenter la taille et à faire toute sorte de choses drôles là. Cela fonctionne comme nous aurions fait attendre. Tous les droits, toutes les questions à ce sujet? Maintenant, l'autre raison que nous avons besoin de vous avez la possibilité pour être en mesure de définir ce que type de variables de données sont est parce que parfois nous ne faisons pas vouloir initialiser les variables avec quelques données au point de définition. Donc dans ce cas, disons que je veux commencer à entrer certains grades dans un carnet de notes. Eh bien, je sais que l'un des variables qui je veux être va être un grade mutable. Et nous savons aussi que nous veux que ce soit un entier. Mais peut-être que nous ne le faisons pas encore avoir cette qualité disponible. Dans Swift, vous devez définir le type de données qui est associé à un variable ou une constante laisser Avant de pouvoir utiliser cette variable. Parce qu'il est fortement typé, vous devez associer un type avec ces variables. Donc dans ce cas, si je ne l'ai pas correctement initialisé le premier avec une certaine valeur, alors je besoin de dire ce que Swift Je pense que le type de données soit. Et il va rester ce même type de données tout au long de l'histoire de ce programme. Maintenant, vous pourriez être tenté dès que Je l'ai créé cette variable de qualité et à condition qu'elle un entier de 100, maintenant, si je vouloir essayer de concaténer une chaîne avec cet entier, pourraient être tentés de continuer à utiliser cet opérateur de concaténation comme nous l'avons fait à quelques lignes avant. Mais malheureusement, Ce sera effectivement pas travailler, parce que vous êtes essentiellement l'exécution une opération sur deux types différents. Maintenant, ce qui est très différent des autres langages comme PHP qui sont vraiment goosey loosey avec leur genre de types. Ils sont comme, ouais, que ce soit, je ne me soucie pas. Donnez-moi juste un type, et peut-être que je vais faire la bonne chose. Dans ce cas, Swift est très strict sur les types que vous faites affaire avec. Cet opérateur de sommation ou l'opérateur de concaténation a essentiellement un couple de différentes options possibles. Vous pouvez le faire sommation avec des nombres entiers, ou vous peut faire la concaténation de chaîne, et peut-être quelques autres choses aussi. Mais si cet opérateur ne reconnaît pas ce qui est de chaque côté de celui-ci, ou plutôt la combinaison de ceux- deux types, ne sont pas ce qu'il attend, alors il va provoquer une panne. Donc dans ce cas, ça veut dire quoi d'avoir une chaîne plus un nombre entier? Bien dans le contexte de cela, nous voulons probablement à faire une opération de concaténation de chaîne. Mais bien sûr l'ordinateur ne pas avoir ce genre de contexte. Et donc nous avons besoin de fournir que des informations supplémentaires afin qu'il sache ce qu'il est que nous voulons faire. En d'autres termes, le fait que Swift est fortement typé signifie que vous avez à faire un peu de travail supplémentaire pour le faire fonctionner le manière que vous voulez. Mais de ce fait, il est plus sûr. Et une fois que vous avez prendre compte de ces types, les choses commencent franchement fonctionner assez bien. Donc dans ce cas, nous serions alors effectuer la concaténation par coulée explicitement l'entier en chaîne en l'enveloppant dans cette capitale fonction S String, puis en utilisant la concaténation de chaîne opérateur de modifier notre variable de l'étiquette, et puis l'imprimer. Jusqu'ici, tout va bien? Très bien, passons à autre chose. Maintenant, il ya une variété de données types que nous pouvons utiliser à Swift. Comme vous l'avez pris l'habitude de, nous pouvons créer un tableau modifiable. Et ce tableau ne peut contenir un seul type. Donc dans ce cas, nous allons créer un mutables tableaux de nombres entiers, nous appelons les qualités, et nous serons en mesure de stocker que dans ce crochet format que vous avez pris l'habitude à une variété d'autres langues. Mais remarquons que nous sommes ici la définition d'un certain nombre de choses. grades est un variable-- mutable nous pas utiliser le mot clé let. Cela signifie donc que nous pouvons ensuite modifier le contenu de ce tableau. Il est de type Array Int, et nous pouvons dire que sur la base de ces crochets ici. Or l'une des belles choses à ce sujet est que nous avoir accès à un grand nombre de Information Supplémentaire sur le réseau en utilisant simplement une notation simple point. Ainsi, par exemple, grades.count nous fournit le nombre d'éléments qui existent en ce que tableau, que nous pouvons alors accéder jolie facilement en utilisant simplement que la notation de points. Si vous souhaitez ajouter supplémentaire articles à ce tableau, vous ne pouvez pas faire le style de PHP où vous venez de définir explicitement, à un indice donné, une certaine valeur que vous souhaitez insérer. Au lieu de cela, utilisez le append procédé dans le type de tableau pour ajouter cet élément, 95, à cette liste. Alors maintenant, ce tableau a la suivante contents-- 100, 0, 90, 85. Et maintenant, nous avons apposé leurs 95 à cela aussi. Il ya d'autres façons nous pouvons ajouter des choses. Vous pouvez effectivement utiliser un opérateur de sommation, qui sera interprété comme une opération réseau de append. Et vous pouvez ajouter une autre, puis tableau, dont les contenus sont 70 et 80, à ce tableau. Alors maintenant, nous avons la le contenu de cette variable grades-- 100, 0, 90, 85, 95, 70, et 80. Ceci est juste un joli petit syntaxique Swift sucre qui nous fournit. Donc, si nous voulons résumer le grades, nous sommes peut-être allez vouloir itérer sur chaque article dans cette boucle. Et nous avons, à Swift, la notion d'une boucle que vous attendez. Mais la façon dont nous indiquons une gamme est légèrement différente. Donc dans ce cas, à résumer tout, nous allons va créer un temporaire variable appelée somme pour que nous de maintenir ce nombre. Et remarquez notre pour boucle construction ici. Pour l'index de 0 ..