[Bermain muzik] DAN AMRMENDARIZ: Setiap orang, selamat datang ke seminar CS50, iOS Pembangunan App dengan Swift. Saya Dan Armendariz, dan saya pendidik yang sains komputer di sini di Harvard. Dan jam berikutnya akan menjadi lawatan badai barangan sebanyak mengenai topik ini kerana kami boleh muat. Saya akan menghantar semua kod sumber bahawa anda akan lihat hari ini dalam talian. Kita mungkin tidak dapat benar-benar pergi atas segala sesuatu bahawa saya bahawa saya menunjukkan anda dalam jam ini. Tetapi sekurang-kurangnya diharapkan melalui komen-komen kod sumber, anda akan dapat untuk mencuba untuk mencari jalan apa sebenarnya yang berlaku untuk perkara-perkara bahawa kita tidak cukup sampai ke. Secara keseluruhan, struktur ucapan hari ini adalah seperti berikut. Kami akan bermula melakukan beberapa asas sintaks dengan bahasa Swift, pergi ke beberapa yang lebih maju sintaks bahasa Swift. Kerana bahasa adalah benar-benar moden dan ia mempunyai banyak tahap yang tinggi ciri-ciri, perkara-perkara yang kita tidak mempunyai lihat dalam C sepanjang CS50, atau juga beberapa bahasa-bahasa lain bahawa kita telah mula menggunakan dalam CS50 seperti PHP, jadi saya akan perlu cuba untuk memperkenalkan juga beberapa topik yang berkaitan dengan bahasa peringkat yang lebih tinggi bahawa anda tidak boleh melihat secara mendalam di CS50, tetapi anda akan melihat di kemudian kelas sains komputer. Jadi ia akan menjadi padat jam. Dan jangan ragu untuk membiarkan saya jika anda mempunyai sebarang pertanyaan. Jadi jika anda berminat dalam melakukan pembangunan dengan Swift, atau benar-benar apa-apa pembangunan aplikasi iOS, terdapat beberapa keperluan. Pertama sekali, anda perlu untuk menggunakan Mac, berjalan dalam contoh bahawa kita akan menggunakan hari ini, versi yang agak baru OS X. Dalam kes ini, saya berjalan X 10.5. Anda boleh berjalan 10.11 jika anda mahu. Tetapi segala-galanya yang anda akan lihat adalah yang melibatkan Xcode 7 dan kemudian, yang mempunyai versi terbaru Swift, yang Swift 2.0. Ini sebenarnya yang cukup perbezaan yang penting. Banyak sintaks mempunyai berubah cukup ketara dalam beberapa kes dari Swift 1.0, yang telah dilancarkan pada tahun lepas, untuk Swift 2.0, yang hanya keluar jatuh ini. Oleh itu, kita akan menunjukkan kepada Swift 2.0. Banyak perkara-perkara yang anda mencari dalam talian apabila anda cuba untuk mendapatkan tambahan maklumat mengenai pelbagai perkara, anda mungkin mahu jelas mencari Swift 2 bukannya Swift sekadar lama untuk membuat memastikan bahawa anda mendapat sintaks yang betul. Malah, ini biasanya benar. Terdapat sejumlah pesat pembangunan berlaku dalam bahasa Swift sejak Apple mengeluarkan, saya fikir apa, ia telah sedikit lebih setahun sekarang. Dan perkara yang telah berubah secara mendadak pada masa itu. Dan sebagainya tidak kecewa jika, apabila anda melihat sekeliling untuk topik mengenai Swift atau bagaimana untuk mencapai sesuatu menggunakan beberapa kod contoh atau sesuatu yang ia tidak benar-benar bekerja pada Swift 2.0. Pastikan anda sedang mencari khusus untuk versi yang mencuba untuk mengurangkan kesan-kesan yang berbeza versi dan orang-orang macam perkara. Saya akan cuba untuk menunjukkan hanya beberapa perkara yang berbeza untuk versi yang lebih lama. Tetapi ia adalah sesuatu yang perlu diawasi. Itu mungkin akan menjadi salah satu sakit kepala terbesar yang anda akan mempunyai dengan Swift adalah mencari kod contoh yang lebih tua, walaupun hanya oleh beberapa bulan, cuba untuk menggunakan dalam projek yang lebih moden anda. Dan ia hanya semata-mata tidak berfungsi. Anda mendapat ralat pengkompil, sintaksis kesilapan, pelbagai barangan gila. Jadi hanya bersabar dengan itu, dan anda akan mudah-mudahan mempunyai pengalaman yang cukup baik dengan keseluruhan Swift. Sekarang anda boleh sebenarnya join-- dan saya berharap kita sebenarnya masih mempunyai ini year-- ini CS 50-an Apple app pasukan pembangunan, yang akan membolehkan anda untuk memasang apa-apa aplikasi yang anda buat pada peranti iOS anda. Jadi kita lihat di URL ini jika anda berminat untuk melakukannya. Jadi hanya beberapa perkara tentang Swift sendiri. Ia adalah bahasa yang disusun. Tetapi anda akan melihat bahawa beberapa ciri-ciri yang kita gunakan membolehkan ia digunakan juga dalam sedikit seperti yang ditafsirkan dengan cara juga. Banyak sintaks yang dipinjam dari C. Ia berdasarkan dan ditulis dalam C. Demikianlah kita akan melihat bahawa terdapat banyak bawa pulang dari pengetahuan sedia ada anda dari C yang kita boleh pelabuhan untuk Swift. Tetapi ada perkara yang membuat ia sangat berbeza daripada C. Ia sangat kuat ditaip. Ada pengurusan ingatan automatik. Anda tidak akan mempunyai untuk menggunakan malloc atau di mana percuma. Ia direka untuk keluasan. Jadi dalam erti kata lain, anda boleh menggunakannya dalam pelbagai konteks, daripada Apple Watch ke iPhone sepanjang jalan sehingga kepada OS X, dan juga beberapa pelayan, juga beberapa skrip. Tetapi kita akan melihat bahawa sokongan untuk skrip tidak cukup di sana lagi kerana ia adalah dalam bahasa-bahasa lain. Jadi kemungkinan besar anda akan menggunakan ini semata-mata untuk pembangunan pada Mac atau iPhone anda. Dan ia mempunyai banyak ciri-ciri moden. Dan banyak perkara-perkara ini adalah barangan yang kita akan cuba untuk menangani hari ini, tetapi juga topik kami yang terus-terang, kita boleh menumpukan keseluruhan kursus. Malah, CS 51, yang merupakan semester akan datang yang ditawarkan, memberi tumpuan banyak mengenai topik-topik ini yang dinyatakan di bawah. Jadi, anda boleh menghabiskan satu semester memahami perkara-perkara ini. Tetapi kita akan cuba untuk mendapatkan melalui mereka sekurang-kurangnya cukup bahawa anda boleh memahami apa yang berlaku apabila anda melihat pada program Swift dan dapat hack cara anda melaluinya untuk projek akhir. Sekarang salah satu cara yang terbaik yang anda boleh mendapatkan maklumat tambahan mengenai ini terus-terang sahaja melalui Apple menyediakan dokumentasi untuk Swift. Ada banyak API yang boleh didapati. Dan ini adalah asas rumah yang baik untuk anda untuk mencari, perkara-perkara tertentu yang mahu lakukan dengan API yang melibatkan iOS. Jika anda mahu menggunakan kamera untuk Contohnya, anda boleh mula mencari di sini, dan juga menggunakan Google dan Stack Limpahan seperti biasa. Sebarang pertanyaan mengenai ini sebelum kita melompat kanan dalam? Baiklah. Mari kita bergerak ke atas. Jadi pertama, saya mempunyai bilangan fail contoh. Dan saya akan cuba untuk melangkah melalui mereka agak cepat. Ini adalah fail Hello World untuk Swift. Ia amat mudah. Ada cara yang lebih komen daripada terdapat kod sebenar. Perhatikan kod sebenar adalah di bahagian paling bawah di talian 14. Ia mengatakan cetak. Dan kemudian ia panggilan fungsi. Kita lulus ke dalamnya rentetan dipanggil Hello cs50. Perhatikan bahawa tidak ada koma bertitik. Perhatikan bahawa tidak ada utama int. Ada tiada yang Cruft bahawa kita mempunyai dengan C. Apabila kita menggunakan Swift dengan cara ini, yang hanya ditulis dalam fail teks dan disimpan pada komputer saya, maka Saya boleh menyusun dan menjalankannya. Perhatikan bahawa di sini Saya tidak menggunakan IDE CS50. Ini menganggap bahawa saya berjalan dan bahawa saya pada OS X, dan bahawa saya telah Xcode telah dipasang pada mesin ini dalam usaha untuk ini untuk benar-benar berfungsi. Tetapi ini hanya fail teks biasa yang kita boleh menyusun dan mengedit. Jadi mari kita lihat bagaimana ini sebenarnya berfungsi. Bagaimana jika saya ingin menyusun? 1.swift swiftc. Selepas seketika atau dua, ia akan melihat bahawa kita ada sekarang disusun ini ke dalam fail yang dipanggil 1. Dan sekarang kita telah dicetak CS50 kami, permohonan Hello World kami agak. Perhatikan satu perkara lain yang dengan baik adalah dengan lalai, kita tidak perlu input a / n untuk mencetak baris baru. Secara lalai, fungsi cetak dalam Swift akan mencetak baris baru untuk anda. Anda boleh lulus tambahan pilihan parameter untuk memberitahu ia tidak berbuat demikian. Tetapi Google untuk maklumat lanjut mengenai itu. Secara lalai, ia akan melakukan garis cetak. Baiklah, jadi mari kita beralih kemudian kepada beberapa perkara lain. Jadi bagaimana boleh kita benar-benar menentukan pembolehubah? Kita boleh melakukan itu menggunakan salah satu daripada dua kaedah. Dan salah satu yang saya ingin memberitahu anda tentang pertama adalah definisi let ini. Dan ini adalah penting kerana berkesan apa yang kita lakukan adalah menentukan pemalar. Kami akan mewujudkan pembolehubah, atau lebih tepat dipanggil nama yang tetap, menyediakan kepadanya beberapa data-- dalam kes ini, rentetan Dan itu. Tetapi dengan menggunakan let ini kata kunci, kita katakan bahawa ini variable-- atau lagi constant-- dipanggil nama tidak pernah akan berubah. Ia akan menjadi tidak berubah-ubah sepanjang tempoh program ini atau di seluruh tempoh konteksnya yang berubah-ubah yang boleh didapati. Ini adalah benar-benar penting bahawa apabila anda mempunyai beberapa data yang tidak akan berubah dalam program anda, dan anda akan melihat pelbagai contoh kira-kira apabila kita mahu menggunakan biarkan berbanding sintaks yang lain, ia adalah penting bahawa anda menggunakan biarlah mana mungkin kerana memberitahu ini bahasa yang ia adalah tidak akan berubah, dan ia sebenarnya boleh melakukan banyak pengoptimuman untuk meningkatkan kelajuan dan keselamatan program anda. Dan dengan keselamatan, maksud saya biarkan ia kemalangan dengan kesilapan gila bahawa kita mungkin biasa melihat dalam C. Maka kita boleh menggunakan rentetan interpolasi untuk merangkumi ini dalam rentetan. Oleh itu, kita boleh lihat dalam ini garis cetak, cetak hello, dan kemudian menggunakan garis sendeng terbalik parens terbuka, dan kemudian nama pembolehubah saya, dalam kes ini berterusan, menutup kurungan. Saya pada dasarnya kemudian meletakkan kandungan nama pembolehubah dipanggil ini dalam tali dan kemudian mencetak hasil di sana. Ada satu perubahan lain ke fail ini: yang yang saya ada, di bahagian paling atas, dimasukkan ke dalam garis shebang, yang pada dasarnya hanya menyatakan yang saya mahu untuk menggunakan Jurubahasa Swift, yang bermakna bahawa saya tidak lagi perlu menyusun program khusus ini. Saya hanya boleh berjalan seperti skrip sendiri. Tetapi ini, dalam kes ini, di belakang tabir sedang disusun dan kemudian diuruskan. Ia hanya dapat dilihat dengan kami. Baiklah, jadi mari kita beralih. Jadi ada sedikit tipu muslihat yang hanya berlaku sebelum ini. Aku membawa kepadamu bahawa saya boleh menentukan pemalar. Dan saya boleh memberi sedikit data untuk melakukannya. Tetapi dalam kes ini, notis bahawa saya tidak sebenarnya menentukan jenis data bahawa ia adalah. Dan itu kerana pengkompil, Swift boleh membuat kesimpulan jenis data hanya berdasarkan data yang saya masukkan ke dalamnya. Kerana ia tahu bahawa dengan menilai ini berubah-ubah di sini, ini buat data di sini, ia tahu bahawa ia adalah rentetan. Dan supaya nama malar ini Oleh itu, adalah akan menjadi rentetan juga. Tetapi kita juga boleh menjadi jelas tentang jenis itu kita akan gunakan untuk pemalar atau pembolehubah dengan menggunakan sintaks ini instead-- biarkan String nama kolon sama Dan, yang dalam kes ini bermakna kami akan menentukan menamai yang tetap. Ia akan menjadi jenis tali. Dan nilai yang akan menjadi Dan. Sekarang cara lain yang kita boleh membuat variables-- dan ini adalah pembolehubah yg mungkin berubah, yang bermakna bahawa kita adalah, sebenarnya, akan untuk menukar kandungan mereka kadang-kadang dalam tempoh konteksnya yang berubah-ubah yang defined-- kita menggunakan kata kunci var dan bukannya membiarkan. Tetapi sekali lagi, secara lalai, kecuali anda tahu bahawa anda perlu untuk memanipulasi data itu, cuba menggunakan biarlah untuk peningkatan prestasi. Dalam kes ini, saya boleh kemudian nyatakan jenis data yang kita harapkan untuk menjadi bahagian dalam pembolehubah baru ini dipanggil label. Ia akan menjadi rentetan. Dan kita akan kemudian concatenate dua tali bersama-sama, tali hello, dan tali yang diwakili oleh berubah-ubah, atau lebih tepat nama yang berterusan. Jadi ini adalah baik kerana ini agak PHP seperti dalam kita yang mempunyai tali dinamika sangat mudah. Kami tidak mempunyai untuk secara automatik menggunakan apa-apa jenis pengurusan ingatan untuk meningkatkan saiz dan melakukan apa-apa jenis perkara-perkara lucu di sana. Ini kerja-kerja seperti yang kita benar-benar inginkan. Baiklah, apa-apa soalan mengenai perkara ini? Sekarang sebab lain yang kami memerlukan anda mempunyai keupayaan dapat menentukan apa Jenis pembolehubah data adalah kerana kadang-kadang kita tidak mahu untuk memulakan pembolehubah dengan beberapa data di titik definisi. Jadi dalam kes ini, katakan yang saya ingin memulakan memasukkan beberapa gred ke dalam sebuah buku gred. Well, saya tahu bahawa salah satu pembolehubah yang saya mahu menjadi akan menjadi gred yg mungkin berubah. Dan kita juga tahu bahawa kita mahu ia menjadi integer. Tetapi mungkin kita tidak lagi mempunyai gred yang disediakan. Dalam Swift, anda perlu untuk menentukan jenis data yang dikaitkan dengan berubah-ubah atau biarkan berterusan sebelum anda boleh sebenarnya menggunakan pembolehubah itu. Oleh kerana ia adalah sangat ditaip, anda perlu mengaitkan jenis yang dengan pembolehubah ini. Jadi dalam kes ini, jika saya tidak ada betul dimulakan pertama dengan beberapa nilai, maka saya perlu memberitahu Swift apa Saya menjangkakan jenis data untuk menjadi. Dan ia akan kekal yang sama jenis data dalam sejarah program ini. Sekarang anda mungkin akan terdorong dengan seberapa segera yang Saya telah mencipta pembolehubah gred ini dan dengan syarat bahawa ini adalah integer 100, sekarang jika saya ingin mencuba untuk menyatukan rentetan dengan integer itu, mungkin akan terdorong untuk masih menggunakan bahawa pengendali tali dinamika seperti yang kami lakukan hanya beberapa baris sebelum ini. Tetapi malangnya, ini akan sebenarnya tidak bekerja, kerana anda adalah dasarnya melaksanakan operasi kepada dua jenis yang berbeza. Sekarang ini adalah sangat berbeza dari yang lain bahasa seperti PHP yang benar-benar tolol loosey dengan mereka sort jenis. Mereka hanya suka, ya, apa pun, saya tidak peduli. Tetapi berilah satu jenis, dan mungkin saya akan melakukan perkara yang betul. Dalam kes ini, Swift adalah sangat ketat mengenai jenis bahawa anda berurusan dengan. Ini pengendali penjumlahan atau pengendali dinamika mempunyai asasnya beberapa pilihan yang berbeza mungkin. Anda boleh melakukan penjumlahan dengan bilangan bulat, atau anda boleh lakukan rentetan dinamika dan mungkin beberapa perkara lain juga. Tetapi jika pengendali itu tidak mengiktiraf apa yang ada di sebelah sama ada ia, atau sebaliknya gabungan mereka dua jenis, tidak apa yang ia menjangkakan, maka ia akan menyebabkan kegagalan. Jadi dalam kes ini, apa yang dimaksudkan mempunyai tali plus integer? Baik dalam konteks ini, kita mungkin mahu untuk melakukan operasi rentetan dinamika. Tetapi sudah tentu komputer tidak mempunyai bahawa jenis konteks. Dan dengan itu kita perlu menyediakan bahawa maklumat tambahan membiarkan ia tahu apa yang ia ialah kita mahu lakukan. Jadi dalam erti kata lain, hakikat yang Swift amat ditaip bermakna anda perlu melakukan sedikit sedikit kerja tambahan untuk mendapatkannya untuk mengendalikan cara yang anda mahu. Tetapi hasilnya, ia adalah lebih selamat. Dan sebaik sahaja anda mengambil kira orang-orang jenis, perkara yang hanya terus-terang mula untuk bekerja dengan baik. Jadi dalam kes ini, maka kita akan melaksanakan rentetan dinamika dengan jelas pemutus integer kepada rentetan dengan membungkus dalam ini modal S String fungsi, dan kemudian menggunakan dinamika tali pengendali untuk mengubah pembolehubah label kami, dan kemudian mencetak. Setakat ini, begitu baik? Baiklah, mari kita bergerak ke atas. Kini terdapat pelbagai data jenis yang boleh kita gunakan dalam Swift. Seperti yang anda telah menjadi biasa dengan, kita boleh membuat pelbagai yg mungkin berubah. Dan lokasi yang hanya boleh mengandungi satu jenis. Jadi dalam kes ini, kita akan mewujudkan satu tatasusunan yg mungkin berubah integer, yang kami akan menghubungi gred, dan kami akan dapat untuk menyimpan bahawa dalam kurungan persegi ini format seperti anda telah berkembang biasa ke dalam pelbagai bahasa lain. Tetapi perhatikan bahawa di sini kita berada menentukan beberapa perkara. gred adalah variable-- yg mungkin berubah kita tidak menggunakan kata kunci let itu. Ini bermakna kita boleh mengubah suai kandungan pelbagai ini. Ia adalah jenis Array Int, dan kami mengetahui perkataan yang berdasarkan kurungan persegi di sini. Sekarang salah satu perkara yang baik tentang ini adalah bahawa kita mempunyai akses kepada banyak informasi tambahan tentang array hanya menggunakan beberapa notasi dot mudah. Jadi, sebagai contoh, grades.count menyediakan kepada kami bilangan item yang wujud dalam yang pelbagai, yang kita boleh mengakses cantik mudah hanya menggunakan bahawa notasi titik. Jika anda ingin menambah tambahan barangan kepada pelbagai ini, anda tidak boleh melakukan gaya PHP di mana anda hanya menentukan dengan jelas, pada indeks yang diberikan, beberapa nilai yang anda mahu masukkan. Sebaliknya, gunakan tambah yang kaedah dalam jenis array untuk menambah item, 95, ke senarai ini. Jadi sekarang pelbagai ini mempunyai pengikut yang contents-- 100, 0, 90, 85. Dan sekarang kami telah dilampirkan 95 untuk itu juga. Terdapat cara lain kita boleh menambah sesuatu. Anda sebenarnya boleh menggunakan pengendali penjumlahan, yang akan ditafsirkan sebagai operasi mudah tambah. Dan anda boleh menambah satu lagi pelbagai, yang mempunyai kandungan 70 dan 80, untuk pelbagai itu. Jadi sekarang kita mempunyai kandungan dalam pembolehubah ini grades-- 100, 0, 90, 85, 95, 70, dan 80. Ini hanyalah sintaksis baik sedikit gula yang Swift memberikan kepada kami. Jadi, jika kita ingin menjumlahkan gred, kami mungkin akan mahu untuk melelar atas setiap item dalam gelung ini. Dan kita mempunyai, dalam Swift, tanggapan daripada untuk gelung seperti yang anda inginkan. Tetapi cara kita menunjukkan pelbagai adalah sedikit berbeza. Jadi dalam kes ini, untuk kesimpulan segala-galanya, kita akan akan mewujudkan sementara pembolehubah dipanggil jumlah dalam usaha kita untuk mengekalkan kiraan ini. Dan perhatikan untuk kami pembinaan gelung di sini. Bagi indeks dalam 0 ..