[Música tocando] DAN AMRMENDARIZ: Todos, Benvido ao seminario CS50, IOS App Desenvolvemento con Swift. Eu son Dan Armendáriz, e eu son un preceptor de ciencia da computación aquí en Harvard. E a próxima hora será un rápido tour de tanta cousa sobre este tema como podemos encaixar. Vou publicar todo o código fonte que vai ver hoxe en liña. Podemos non ser capaces de de feito, pasar por riba de todo que eu son que eu son mostrando a vostede nesta hora. Pero, polo menos, espero que a través os comentarios do código fonte, vai ser capaz de tratar de descubrir o que exactamente está a suceder para isto que non moi chegar. En xeral, a estrutura de A charla de hoxe será a seguinte. Nós comezamos a facer algúns básico sintaxe coa linguaxe Swift, indo a algunhas das máis avanzado sintaxe da linguaxe Swift. Porque o idioma é realmente moderno e ten unha morea de alto nivel recursos, cousas que non teñen visto en C durante CS50, ou Mesmo algúns dos outros idiomas que comezan usando en CS50 como PHP, entón eu vou ter que tentar presentar tamén algúns temas que están relacionados con linguaxes de alto nivel que non pode ver en profundidade o CS50, pero vai ver máis tarde clases de informática. Por iso, vai ser un hermeticamente embalados hora. E Sinto-se a liberdade de me deixar saber se tes algunha dúbida. Entón, se vostede está interesado en facer desenvolvemento con Swift, ou realmente calquera desenvolvemento de aplicacións IOS, hai un par de requisitos. Primeiro de todo, ten que estar a usar un Mac, correndo nos exemplos que imos estar a usar hoxe, relativamente nova versión do VOS X. Neste caso, eu estou correndo X 10.5. Podes estar executando 10.11, se queres. Pero todo o que vai ver se inclúen Xcode 7 e posterior, que ten a última versión de Swift, que é Swift 2.0. Esta é realmente unha fermosa distinción importante. Unha morea de a sintaxe ten cambiou moito significativamente nalgúns casos desde 1,0 Swift, que foi lanzado o ano pasado, Swift para 2,0, o que só saíu neste outono. Entón, nós estamos indo a amosar Swift 2.0. Unha morea de cousas que buscar en liña cando está intentando obter adicional información sobre unha variedade de cousas, pode querer explicitamente buscar Swift 2 en vez de simplemente vello Swift para facer Asegúrese de que comeza a sintaxe correcta. En realidade, este é xeralmente feito. Hai unha cantidade acelerado de desenvolvemento pasando en lingua Swift sempre que Apple lanzou iso, eu creo o que, foi un pouco máis de un ano agora. E as cousas cambiaron dramaticamente durante ese tempo. E por iso non se errado se, cando está mirando arredor para temas sobre Swift ou como realizar algo usando un código de exemplo ou algo que non fai realmente traballar Swift 2.0. Asegúrese de que está a buscar especialmente para esa versión para tratar de minimizar os efectos de diferentes versións e estes tipos de cousas. Vou tentar destacar só algunhas cousas que son diferentes para versións máis antigas. Pero é algo que atente para. Isto probablemente vai ser unha das maiores dores de cabeza que vai ter con Swift é atopar exemplo de código que é máis vello, mesmo só por algúns meses, intentando usar lo no seu proxecto máis moderno. E iso simplemente non funciona. Está a recibir erros do compilador, sintaxe erros, todo tipo de cousas tolas. Entón, só tes que ser paciente con que, e veña a ter unha experiencia moi agradable con total Swift. Agora podes realmente join-- e espero realmente aínda ten ese este ano-- Apple app do CS 50 equipo de desenvolvemento, que permitirá a instalación de calquera aplicación que crea nos seus dispositivos iOS. Entón bótalle un ollo neste URL se vostede está interesado en facelo. Entón, só tes que un par de cousas sobre si Swift. É unha linguaxe compilada. Pero vai ver que algúns os recursos que utilizamos permiten que sexa usado tamén en algo interpretado como un xeito tamén. Unha boa parte da sintaxe é prestada de C. Baséase e escrito en C. E por iso imos ver que hai un gran número de takeaways a partir do seu coñecemento existente de C que pode porta Swift. Pero hai cousas que facelo moi diferente de C. É moi fortemente tipado. Hai xestión automática de memoria. Non vai ter que usar malloc ou en calquera lugar de balde. Foi deseñado para a xeneralidade. Polo tanto, noutras palabras, pode usalo en todo tipo de contextos, de Apple Assist para iPhone todo o camiño ata VOS X, e mesmo algúns servidores, mesmo algúns scripts. Pero imos ver o que soporte para scripts non é completamente alí aínda como é noutros idiomas. Entón, probablemente está a usar este exclusivo para o desenvolvemento no seu Mac ou iPhone. E ten unha morea de características modernas. E moitas destas cousas son cousas que imos tratar de resolver hoxe, pero tamén os nosos temas que, a verdade, podemos dedicar cursos enteiros. De feito, CS 51, que é preto semestre ofrecido, céntrase moito sobre estes temas que son descritos a continuación. Así, pode pasar un semestre enteiro comprender estas cousas. Pero nós imos tratar para pasar por eles polo menos o suficiente para que pode entender o que é pasando cando mira a un programa Swift e ser capaz de cortar o seu camiño través del para o proxecto final. Agora, unha das mellores formas que pode obter información adicional sobre este é francamente só a través de Apple proporcionada documentación para Swift. Hai unha morea de APIs que están dispoñibles. E esta é unha boa base para ti a ollar para cousas específicas que queren facer unha API que inclúen IOS. Se quere usar a cámara para exemplo, pode comezar a ollar aquí, e tamén usar Google e Stack Overflow como faría normalmente. Calquera preguntas sobre esa antes de ir para a dereita? Todo ben. Imos seguir adiante. Entón, primeiro, eu teño un número de ficheiros de exemplo. E eu vou tentar a etapa a través deles de forma relativamente rápida. Este é o arquivo Ola Mundo para Swift. É moi sinxelo. Non hai xeito máis comentarios que existen código real. Teña en conta o código real está fondo na liña 14. Di impresión. E entón é unha chamada de función. Estamos pasando a cadea chamada Ola CS50. Teña en conta que non hai ningún punto e coma. Teña en conta que non hai ningunha int main. Hai ningún dos cruft que tivemos con C. Cando estamos usando Swift, deste xeito, que é só escrito nun ficheiro de texto e almacenados no meu computador, a continuación, I pode recompila-lo e executalo. Lembre que aquí son non usar o IDE CS50. Isto supón que eu son execución e que eu estou no VOS X, e que eu Xcode xa instalado nesta máquina para que este para realmente función. Pero este é só un ficheiro de texto normal que pode entón compilar e editar. Entón, imos ver como isto realmente funciona. E se eu queira recompila-lo? 1.swift swiftc. Despois dun momento ou dous, Vai ver que temos agora compilado iso nun arquivo chamado 1. E agora nós imprimir noso CS50, nosa aplicación Ola Mundo en vez. Observe outra cousa como ben é que, por defecto, nós non temos a entrada A / N para imprimir unha nova liña. Por defecto, a función de impresión en Swift imprimirá unha nova liña para ti. Pode pasar un adicional opcional parámetro para dicir que non facelo. Pero Google para obter máis información sobre o tema. Por defecto, que vai facer a liña de impresión. Todo ben, entón imos seguir adiante a continuación, para algunhas outras cousas. Entón, como podemos realmente definir variables? Podemos facelo é utilizando un dos dous métodos. E o que quero dicir a vostede sobre a primeira é esta definición let. E iso é importante porque efectivamente o que estamos facendo é definir unha constante. Nós imos crear unha variable, ou mellor, un chamado nome de constante, proporcionar-lle algunhas data-- en Neste caso, a secuencia de Dan. Pero usando este let contrasinal, estamos dicindo que esta é variable-- constant-- chamado de novo nome non vai ser modificado. Será inmutable ao longo a duración deste programa ou en todo o duración do contexto que esta variable é dispoñible. Isto é realmente importante que, cando tes algúns datos que non é cambiará no seu programa, e podes ver unha variedade de exemplos de como queremos usar deixe versus a outra sintaxe, é importante que use deixar sempre que sexa posible, xa que esta notifica Idioma que é non vai ser modificado, e pode realmente facer unha morea de optimizacións para mellorar a velocidade e a seguridade do seu programa. E por seguridade, non significa deixá- falla con erros de tolos para que sexamos afeitos ver en C. Entón, podemos utilizar interpolación de cadea para encapsular que dentro dunha cadea. Así, podemos ver neste liña de impresión, imprimir Ola, e logo usando barra invertida parénteses abertas, e, a continuación, o nome do meu variable, neste caso constante, pechar os parénteses. Estou esencialmente, a continuación, poñer o contido deste nome variable chamada dentro da corda e, a continuación, imprimir o resultado alí. Hai outra modificación a este ficheiro que é o que eu teño, na parte superior, poñer nunha liña shebang, que basicamente só especifica que quero usar o Intérprete Swift, que significa que eu non teño máis para compilar este programa particular. Podo só executa-lo como o seu propio guión. Pero esta é, neste caso, por tras as escenas sendo compilados e, a continuación, en execución. É só invisible para nós. Todo ben, entón imos seguir adiante. Polo tanto, hai un pouco de malandragem que só aconteceu antes. Mostre-lle que eu É posible axustar unha constante. E eu podería proporcionar algúns datos para facelo. Pero, neste caso, repare en que eu non fixen de feito, especifican o tipo de datos que é. E iso é porque o compilador, pode Swift inferir o tipo de datos só en base sobre os datos que eu poñer nel. Porque sabe que por avaliar este variable aquí, ese dereito de datos aquí, el sabe que é unha cadea. E así este nome constante é, polo tanto, vai ser unha cadea así. Pero tamén pode ser explícita sobre o tipo que é imos usar para constantes ou variables usando esta sintaxe instead-- deixe de Cordas nome colon igual Dan, que neste caso significa que estamos vai definir un nome chamado constante. Será do tipo cadea. E o valor será Dan. Agora outra forma que podemos crear variables-- e estes son variables mutables, que significa que estamos, de feito, vai para cambiar o seu contido nalgún momento da duración do contexto que esa variable é defined-- nós usar a palabra chave var, no canto de deixar. Pero, de novo, por defecto, se non sabe que precisa para manipular eses datos, proba a usar para deixar melloras de rendemento. Neste caso, podo, entón, especificar o tipo de datos que esperamos estar dentro esta nova variable chamada etiqueta. Vai ser unha cadea. E nós estamos indo, a continuación, concatenar dúas cordas en conxunto, a cadea Ola, ea cadea representada pola variable, ou mellor, o nome constante. Entón, iso é bo porque esta está un tanto como PHP en que ten moi fácil concatenación. Non temos para automaticamente utilizar calquera tipo de xestión de memoria para aumentar o tamaño e facer calquera tipo de cousas divertido alí. Isto funciona como sería de esperar, en realidade. Todo ben, calquera dúbida sobre este? Agora, a outra razón que necesitamos ter a capacidade para poder establecer o que tipo de variables de datos son é porque ás veces non o facemos quere arrincar variables con algúns datos no punto de definición. Polo tanto, neste caso, por exemplo que quero comezar a introducir algunhas notas nun libro de notas. Ben, eu sei que un dos variables que quero ser vai ser unha clase mutável. E tamén sabemos que quero que sexa un enteiro. Pero quizais nós non facemos aínda ten ese grao dispoñible. En Swift, ten que definir o tipo de datos que está asociada cun variable ou unha constante deixar antes de que poida realmente usar esa variable. Porque é fortemente tipado, ten que asociar un tipo de con estas variables. Polo tanto, neste caso, se eu non teño propiamente iniciar o primeiro con algún valor, entón eu teño que dicir que Swift Espero que o tipo de datos a ser. E vai permanecer que mesmo tipo de datos ao longo da historia deste programa. Agora podes ser tentado polo que Eu creei esta variable grao e sempre que un número enteiro de 100, agora si quero tentar concatenar unha cadea con este completo, pode ser tentado a usar aínda ese operador de concatenación de cadeas como fixemos só algunhas liñas antes. Pero, desgraciadamente, que realmente non vai traballar, porque é esencialmente executando unha operación en dous tipos diferentes. Agora iso é moi diferente doutros linguaxes como PHP que son realmente goosey loosey co seu tipo de tipos. Están só lle gusta, si, calquera que sexa, eu non me importa. Só me dea un tipo, e quizais eu vou facer as cousas ben. Neste caso, é Swift moi rigoroso sobre os tipos que está lidando. Este operador sumatorio ou operador de concatenación ten esencialmente un par de diferentes opcións posibles. Podes facer sumatorio con números enteiros, ou pode facer concatenación de cadeas, e quizais algunhas outras cousas tamén. Pero se ese titular non recoñece o que é en ambos os dous lados do mesmo, ou mellor, a combinación dos dous tipos, non é o que está esperando, a continuación, que vai causar un fallo. Polo tanto, neste caso, o que significa para ter unha corda máis un número enteiro? Ben no contexto tanto, nós probablemente quere a facer unha operación de concatenación de cadeas. Pero está claro que o ordenador non ten este tipo de contexto. E por iso necesitamos proporcionar que a información adicional para deixar saber o que é que queremos facer. Así, noutras palabras, o feito que Swift é fortemente tipado significa que ten que facer un pouco de traballo adicional para obtelo para controlar o forma que desexa. Porén, como resultado, é máis seguro. E unha vez que ten tomar en conta os tipos, cousas só francamente comezar funcionar moi ben. Polo tanto, neste caso, nós, a continuación, vai executar concatenación de cadeas por filtración explicitamente o enteiro para unha cadea por envolve-lo neste capital de función S cadea, e logo a través da concatenación operador para modificar a nosa variable etiqueta, e, a continuación, imprimir lo. Tan lonxe, tan bo? Todo ben, imos seguir adiante. Agora, hai unha variedade de datos tipo que podemos utilizar en Swift. Como se acostumaron a, podemos crear unha matriz mutável. E esa matriz só pode conter un único tipo. Polo tanto, neste caso, nós estamos indo a crear un mutables matrices de enteiros, o que imos chamar graos, e seremos capaces para almacenar que neste paréntese formato que creceu acostumado a en unha variedade de outras linguaxes. Pero teña en conta que aquí estamos definindo un par de cousas. clases é un variable-- mutável non utilizar a palabra chave let. Entón iso significa que podemos modificar para o contido desta matriz. É do tipo Array Int, e podemos dicir que con base neses corchetes aquí. Agora, unha das cousas agradables sobre iso é que nós teñen acceso a unha gran cantidade de Información adicional sobre a matriz usando só algúns notación de punto simple. Así, por exemplo, grades.count ofrece para nós o número de elementos que hai nese array, que pode, entón, acceder fermosa facilmente usando simplemente que a notación de punto. Se queres engadir adicional elementos para esta matriz, non pode facer o estilo PHP onde acaba de establecer explicitamente, a un dato índice, un valor que quere inserir. Pola contra, usa o acréscimo método no tipo de matriz para engadir este elemento, 95, a esta lista. Entón agora esa matriz ten a seguinte contents-- 100, 0, 90, 85. E agora temos engadido 95 para que, como ben. Hai outras formas Podemos engadir cousas. Pode realmente usar un operador de suma, que será interpretada como unha operación de matriz de datos anexados. E pode logo engadir outro array, cuxo contido é de 70 e 80, para esa matriz. Polo tanto, agora temos o contido deste variable grades-- 100, 0, 90, 85, 95, 70, e 80. Este é só un pouco agradable sintáctica azucre que Swift ofrece para nós. Polo tanto, se queremos sumar o graos, estamos quizais Vai querer facer unha iteración sobre cada elemento neste loop. E nós temos, con Swift, a noción dun loop for como sería de esperar. Pero o camiño que nos indicamos un intervalo é un pouco diferente. Polo tanto, neste caso, a Resumindo todo, imos vai crear un temporal chamado suma variable para que para manter esta conta. E teña en conta o noso para construción de loop aquí. Para o índice en 0 ..