[Música tocando] DAN AMRMENDARIZ: Todos, bem-vindo para o seminário CS50, iOS App Desenvolvimento com Swift. Eu sou Dan Armendariz, e eu sou um preceptor de ciência da computação aqui em Harvard. E a próxima hora vai ser um rápido tour de tanta coisa sobre este tópico como podemos encaixar. Vou postar todo o código fonte que você vai ver hoje online. Podemos não ser capazes de na verdade, passar por cima de tudo que eu sou que eu sou mostrando a você nesta hora. Mas, pelo menos, espero que através os comentários do código fonte, você vai ser capaz de tentar descobrir o que exatamente está acontecendo para essas coisas que nós não muito chegar. Em geral, a estrutura de A palestra de hoje será a seguinte. Nós vamos começar a fazer alguns básico sintaxe com a linguagem Swift, indo em algumas das mais avançado sintaxe da linguagem Swift. Porque o idioma é realmente moderno e tem um monte de alto nível recursos, coisas que não têm visto em C ao longo de CS50, ou Mesmo alguns dos outros idiomas que nós começamos usando em CS50 como PHP, então eu vou ter que tentar apresentar também alguns temas que estão relacionados com linguagens de alto nível que você não pode ver em profundidade no CS50, mas você vai ver mais tarde aulas de informática. Por isso, vai ser um hermeticamente embalados hora. E sinta-se livre para me deixar saber se você tem alguma dúvida. Então, se você estiver interessado em fazer desenvolvimento com Swift, ou realmente qualquer desenvolvimento de aplicativos iOS, há um par de requisitos. Primeiro de tudo, você tem que estar usando um Mac, correndo nos exemplos que vamos estar usando hoje, relativamente nova versão do OS X. Neste caso, eu estou correndo X 10.5. Você pode estar executando 10.11, se quiser. Mas tudo o que você vai ver se envolvendo Xcode 7 e posterior, que tem a versão mais recente de Swift, que é Swift 2.0. Esta é realmente uma bonita distinção importante. Um monte de a sintaxe tem mudou muito significativamente em alguns casos a partir de 1,0 Swift, que foi lançado no ano passado, Swift para 2,0, o que só saiu neste outono. Então, nós estamos indo para mostrar Swift 2.0. Um monte de coisas que você procurar on-line quando você está tentando obter adicional informações sobre uma variedade de coisas, você pode querer explicitamente procurar Swift 2 ao invés de simplesmente velho Swift para fazer Certifique-se de que você começa a sintaxe correta. Na verdade, este é geralmente verdade. Há uma quantidade acelerado de desenvolvimento acontecendo na língua Swift desde que a Apple lançou isso, eu acho o que, tem sido um pouco mais de um ano agora. E as coisas mudaram dramaticamente durante esse tempo. E por isso não se frustrado se, quando você está olhando ao redor para tópicos sobre Swift ou como realizar algo usando algum código de exemplo ou algo que não faz realmente trabalhar em Swift 2.0. Certifique-se de que você está procurando especificamente para essa versão para tentar minimizar os efeitos de diferentes versões e esses tipos de coisas. Vou tentar destacar apenas algumas coisas que são diferentes para versões mais antigas. Mas é algo que atente para. Isso provavelmente vai ser uma das maiores dores de cabeça que você vai ter com Swift é encontrar exemplo de código que é mais velho, mesmo apenas por alguns meses, tentando usar lo em seu projeto mais moderno. E isso simplesmente não funciona. Você está recebendo erros do compilador, sintaxe erros, todos os tipos de coisas loucas. Então, basta ser paciente com que, e você venha a ter uma experiência bastante agradável com total Swift. Agora você pode realmente join-- e espero nós realmente ainda tem esse este ano-- A Apple app do CS 50 equipe de desenvolvimento, que vai permitir a instalação de qualquer aplicativo que você cria em seus dispositivos iOS. Então dê uma olhada neste URL se você está interessado em fazer isso. Então, basta um par de coisas sobre si Swift. É uma linguagem compilada. Mas você vai ver que alguns os recursos que usamos permitem que ele seja usado também em um pouco interpretado como uma maneira também. Uma boa parte da sintaxe é emprestada de C. É baseado e escrito em C. E por isso vamos ver que há um grande número de takeaways a partir de seu conhecimento existente de C que pode porta para Swift. Mas há coisas que torná-lo muito diferente de C. É muito fortemente tipado. Há gerenciamento automático de memória. Você não vai ter que usar malloc ou em qualquer lugar gratuitamente. Ele foi projetado para a generalidade. Portanto, em outras palavras, você pode usá-lo em todos os tipos de contextos, da Apple Assista para iPhone todo o caminho até OS X, e até mesmo alguns servidores, mesmo alguns scripts. Mas vamos ver o que suporte para scripting não é completamente lá ainda como é em outros idiomas. Então, provavelmente você estará usando este exclusivamente para o desenvolvimento no seu Mac ou um iPhone. E tem um monte de características modernas. E muitas dessas coisas são coisas que vamos tentar resolver hoje, mas também os nossos temas que, francamente, podemos dedicar cursos inteiros. Na verdade, CS 51, que é próximo semestre oferecido, centra-se muito sobre esses tópicos que são descritos abaixo. Assim, você pode passar um semestre inteiro compreender estas coisas. Mas nós vamos tentar para passar por eles pelo menos o suficiente para que você pode entender o que é acontecendo quando você olha a um programa Swift e ser capaz de cortar o seu caminho através dele para o projeto final. Agora, uma das melhores maneiras que você pode obter informações adicionais sobre este é francamente apenas através da Apple fornecida documentação para Swift. Há um monte de APIs que estão disponíveis. E esta é uma boa base para você a olhar para coisas específicas que você querem fazer com uma API envolvendo iOS. Se você quiser usar a câmera para exemplo, você pode começar a olhar aqui, e também usar o Google e Stack Overflow como você faria normalmente. Quaisquer perguntas sobre essa antes de saltar para a direita? Tudo certo. Vamos continuar. Então, primeiro, eu tenho um número de arquivos de exemplo. E eu estou indo tentar a etapa através deles de forma relativamente rápida. Este é o arquivo Olá Mundo para Swift. É muito simples. Não há maneira mais comentários que existem código real. Observe o código real está em parte inferior na linha 14. Diz impressão. E então é uma chamada de função. Estamos passando para uma string chamada Olá CS50. Observe que não há nenhum ponto e vírgula. Observe que não há nenhuma int main. Há nenhum dos cruft que tivemos com C. Quando estamos usando Swift, desta forma, que é apenas escrito em um arquivo de texto e armazenados no meu computador, em seguida, I pode compilá-lo e executá-lo. Repare que aqui eu sou não usando o IDE CS50. Isso pressupõe que eu sou execução e que eu estou no OS X, e que eu Xcode já instalado nesta máquina para que este para realmente função. Mas este é apenas um arquivo de texto normal que pode então compilar e editar. Então, vamos ver como isso realmente funciona. E se eu quiser compilá-lo? 1.swift swiftc. Depois de um momento ou dois, vai ver que temos agora compilado isso em um arquivo chamado 1. E agora nós imprimimos nosso CS50, nossa aplicação Olá Mundo em vez. Observe uma outra coisa como bem é que, por padrão, nós não temos a entrada A / N para imprimir uma nova linha. Por padrão, a função de impressão em Swift irá imprimir uma nova linha para você. Você pode passar um adicional opcional parâmetro para dizer que não fazê-lo. Mas o Google para obter mais informações sobre isso. Por padrão, ele vai fazer a linha de impressão. Tudo bem, então vamos seguir em frente em seguida, para algumas outras coisas. Então, como podemos realmente definir variáveis? Nós podemos fazer isso é usando um dos dois métodos. E o que eu quero dizer a você sobre a primeira é esta definição let. E isso é importante porque efectivamente o que estamos fazendo é definir uma constante. Nós vamos criar uma variável, ou melhor, um chamado nome de constante, fornecer-lhe algumas data-- em Neste caso, a seqüência de Dan. Mas usando este let palavra-chave, estamos dizendo que esta ou variable-- constant-- chamado novamente nome nunca vai ser alterado. Vai ser imutável ao longo a duração deste programa ou em todo o duração do contexto que esta variável é disponível. Isso é realmente importante que, quando você tem alguns dados que não é vai mudar em seu programa, e você verá uma variedade de exemplos sobre quando nós queremos usar deixe versus a outra sintaxe, é importante que você use deixá sempre que possível, porque esta notifica o idioma que é não vai ser alterado, e ele pode realmente executar um monte de otimizações para melhorar a velocidade e a segurança de seu programa. E por segurança, eu não significa deixá- ele falha com erros de loucos para que sejamos acostumados a ver em C. Então, podemos usar interpolação de string para encapsular isso dentro de uma string. Assim, podemos ver neste linha de impressão, imprima Olá, e em seguida, usando barra invertida parênteses abertas, e, em seguida, o nome do meu variável, neste caso constante, fechar os parênteses. Estou essencialmente, em seguida, colocar o conteúdo deste nome variável chamada dentro da corda e, em seguida, imprimir o resultado lá. Há uma outra alteração a este arquivo o que é que eu tenho, no topo, colocar em uma linha shebang, que basicamente apenas especifica que eu quero usar o Intérprete Swift, que significa que eu não tenho mais para compilar este programa particular. Eu posso apenas executá-lo como seu próprio script. Mas esta é, neste caso, por trás as cenas sendo compilados e, em seguida, sendo executado. É apenas invisível para nós. Tudo bem, então vamos seguir em frente. Portanto, há um pouco de malandragem que apenas aconteceu antes. Mostrei-lhe que eu Pode definir uma constante. E eu poderia fornecer alguns dados para fazê-lo. Mas, neste caso, repare que eu não fiz na verdade, especificam o tipo de dados é isso. E isso é porque o compilador, pode Swift inferir o tipo de dados apenas com base sobre os dados que eu colocar nele. Porque ele sabe que por avaliar este variável aqui mesmo, esse direito de dados aqui, ele sabe que é uma string. E assim este nome constante é, portanto, vai ser uma string assim. Mas também pode ser explícita sobre o tipo que é vamos usar para constantes ou variáveis usando esta sintaxe instead-- deixe de Cordas nome cólon igual Dan, que neste caso significa que estamos vai definir um nome chamado constante. Vai ser do tipo String. E o valor vai ser Dan. Agora outra forma que podemos criar variables-- e estes são variáveis ​​mutáveis, que significa que estamos, de fato, vai para mudar seu conteúdo em algum momento da duração do contexto que essa variável é defined-- nós usar a palavra-chave var, em vez de deixar. Mas, novamente, por padrão, se você não sabe que você precisa para manipular esses dados, tente usar para deixar melhorias de desempenho. Neste caso, posso, então, especificar o tipo de dados que esperamos estar dentro de esta nova variável chamada etiqueta. Vai ser uma string. E nós estamos indo, em seguida, concatenar duas cordas em conjunto, a cadeia Olá, ea cadeia representada pela variável, ou melhor, o nome constante. Então, isso é bom porque esta está um tanto como o PHP em que nós tem muito fácil concatenação. Não temos para automaticamente usar qualquer tipo de gerenciamento de memória para aumentar o tamanho e fazer qualquer tipo de coisas engraçadas lá. Isso funciona como seria de esperar, na verdade. Tudo bem, qualquer dúvida sobre este? Agora, a outra razão que precisamos de você ter a capacidade para ser capaz de definir o que tipo de variáveis ​​de dados são é porque às vezes não o fazemos quer inicializar variáveis com alguns dados no ponto de definição. Portanto, neste caso, digamos que eu quero começar a introduzir algumas notas em um livro de notas. Bem, eu sei que um dos variáveis ​​que eu quero ser vai ser uma classe mutável. E também sabemos que nós quero que seja um inteiro. Mas talvez nós não fazemos ainda tem esse grau disponível. Em Swift, você tem que definir o tipo de dados que está associada com um variável ou uma constante deixá antes que você possa realmente usar essa variável. Porque ele é fortemente tipado, você tem que associar um tipo de com estas variáveis. Portanto, neste caso, se eu não tenho propriamente inicializado o primeiro com algum valor, então eu preciso dizer que Swift Espero que o tipo de dados a ser. E vai permanecer que mesmo tipo de dados ao longo da história deste programa. Agora você pode ser tentado assim que Eu criei esta variável grau e desde que um número inteiro de 100, agora se eu quero tentar concatenar uma cadeia com esse inteiro, pode ser tentado a usar ainda esse operador de concatenação de strings como fizemos apenas algumas linhas antes. Mas infelizmente, isso realmente não vai trabalhar, porque você é essencialmente executando uma operação em dois tipos diferentes. Agora isso é muito diferente de outros linguagens como PHP que são realmente goosey loosey com o seu tipo de tipos. Eles estão apenas gosta, sim, qualquer que seja, eu não me importo. Apenas me dê um tipo, e talvez eu vou fazer a coisa certa. Neste caso, é Swift extremamente rigoroso sobre os tipos que você está lidando. Este operador somatório ou operador de concatenação tem essencialmente um par de diferentes opções possíveis. Você pode fazer somatório com números inteiros, ou você pode fazer concatenação de strings, e talvez algumas outras coisas também. Mas se esse operador não reconhece o que é em ambos os lados do mesmo, ou melhor, a combinação daqueles dois tipos, não é o que está esperando, em seguida, ele vai causar uma falha. Portanto, neste caso, o que significa para ter uma corda mais um número inteiro? Bem no contexto de isso, nós provavelmente quer a fazer uma operação de concatenação de strings. Mas é claro que o computador não tem esse tipo de contexto. E por isso precisamos fornecer que as informações adicionais para deixá-lo saber o que é que nós queremos fazer. Assim, em outras palavras, o facto que Swift é fortemente tipado significa que você tem que fazer um pouco de trabalho adicional para obtê-lo para operar o maneira que você gostaria. Porém, como resultado, é mais seguro. E uma vez que você tem tomar em conta os tipos, coisas apenas francamente começar funcionar muito bem. Portanto, neste caso, nós, em seguida, iria executar concatenação de strings por vazamento explicitamente o inteiro para uma string por envolvê-lo neste capital de função S String, e em seguida, usando a concatenação operador para modificar nossa variável etiqueta, e, em seguida, imprimi-lo. Por enquanto, tudo bem? Tudo bem, vamos seguir em frente. Agora, há uma variedade de dados tipos que podemos usar em Swift. Como você se acostumaram a, nós podemos criar uma matriz mutável. E essa matriz só pode conter um único tipo. Portanto, neste caso, nós estamos indo para criar um mutáveis ​​matrizes de inteiros, o que vamos chamar graus, e seremos capazes para armazenar que neste colchete formato que você cresceu acostumado a em uma variedade de outras linguagens. Mas note que aqui estamos definindo um par de coisas. graus é um variable-- mutável nós não utilizar a palavra-chave let. Então isso significa que nós podemos então modificar o conteúdo desta matriz. É do tipo Array Int, e podemos dizer que com base nesses colchetes aqui. Agora, uma das coisas agradáveis sobre isso é que nós têm acesso a uma grande quantidade de informação adicional sobre a matriz usando apenas alguns notação de ponto simples. Assim, por exemplo, grades.count fornece para nós o número de itens que existe nesse array, que pode, então, acessar bonita facilmente usando simplesmente que a notação de ponto. Se você quiser adicionar adicional itens para essa matriz, você não pode fazer o estilo PHP onde você acabou de definir explicitamente, a um dado índice, algum valor que você deseja inserir. Em vez disso, use o acréscimo método no tipo de matriz para acrescentar esse item, 95, a esta lista. Então agora essa matriz tem a seguinte contents-- 100, 0, 90, 85. E agora temos acrescentado 95 para que, como bem. Há outras maneiras Podemos acrescentar coisas. Você pode realmente usar um operador de soma, que será interpretada como uma operação de matriz de acréscimo. E você pode em seguida, acrescentar um outro array, cujo conteúdo é de 70 e 80, para essa matriz. Portanto, agora temos o conteúdo deste variável grades-- 100, 0, 90, 85, 95, 70, e 80. Este é apenas um pouco agradável sintática açúcar que Swift fornece para nós. Portanto, se queremos somar o graus, estamos talvez vai querer fazer uma iteração sobre cada item neste loop. E nós temos, no Swift, a noção de um loop for como seria de esperar. Mas o caminho que nós indicamos um intervalo é um pouco diferente. Portanto, neste caso, a Resumindo tudo, vamos vai criar um temporário chamado soma variável para que nós para manter esta contagem. E note nosso para construção de loop aqui. Para o índice em 0 ..