1 00:00:00,000 --> 00:00:03,332 >> [Bermain muzik] 2 00:00:03,332 --> 00:00:06,200 3 00:00:06,200 --> 00:00:09,590 >> DAN AMRMENDARIZ: Setiap orang, selamat datang ke seminar CS50, 4 00:00:09,590 --> 00:00:11,690 iOS Pembangunan App dengan Swift. 5 00:00:11,690 --> 00:00:15,690 Saya Dan Armendariz, dan saya pendidik yang sains komputer di sini di Harvard. 6 00:00:15,690 --> 00:00:21,510 >> Dan jam berikutnya akan menjadi lawatan badai barangan sebanyak 7 00:00:21,510 --> 00:00:25,160 mengenai topik ini kerana kami boleh muat. 8 00:00:25,160 --> 00:00:29,170 Saya akan menghantar semua kod sumber bahawa anda akan lihat hari ini dalam talian. 9 00:00:29,170 --> 00:00:31,990 Kita mungkin tidak dapat benar-benar pergi atas segala sesuatu 10 00:00:31,990 --> 00:00:34,810 bahawa saya bahawa saya menunjukkan anda dalam jam ini. 11 00:00:34,810 --> 00:00:37,580 Tetapi sekurang-kurangnya diharapkan melalui komen-komen kod sumber, 12 00:00:37,580 --> 00:00:40,830 anda akan dapat untuk mencuba untuk mencari jalan apa sebenarnya yang berlaku untuk perkara-perkara 13 00:00:40,830 --> 00:00:42,950 bahawa kita tidak cukup sampai ke. 14 00:00:42,950 --> 00:00:46,970 >> Secara keseluruhan, struktur ucapan hari ini adalah seperti berikut. 15 00:00:46,970 --> 00:00:52,820 Kami akan bermula melakukan beberapa asas sintaks dengan bahasa Swift, 16 00:00:52,820 --> 00:00:56,290 pergi ke beberapa yang lebih maju sintaks bahasa Swift. 17 00:00:56,290 --> 00:00:59,560 Kerana bahasa adalah benar-benar moden dan ia 18 00:00:59,560 --> 00:01:02,110 mempunyai banyak tahap yang tinggi ciri-ciri, perkara-perkara yang kita tidak mempunyai 19 00:01:02,110 --> 00:01:06,600 lihat dalam C sepanjang CS50, atau juga beberapa bahasa-bahasa lain 20 00:01:06,600 --> 00:01:09,310 bahawa kita telah mula menggunakan dalam CS50 seperti PHP, 21 00:01:09,310 --> 00:01:12,670 jadi saya akan perlu cuba untuk memperkenalkan juga beberapa topik yang 22 00:01:12,670 --> 00:01:18,580 berkaitan dengan bahasa peringkat yang lebih tinggi bahawa anda tidak boleh melihat secara mendalam di CS50, 23 00:01:18,580 --> 00:01:21,380 tetapi anda akan melihat di kemudian kelas sains komputer. 24 00:01:21,380 --> 00:01:25,290 Jadi ia akan menjadi padat jam. 25 00:01:25,290 --> 00:01:28,897 Dan jangan ragu untuk membiarkan saya jika anda mempunyai sebarang pertanyaan. 26 00:01:28,897 --> 00:01:30,730 Jadi jika anda berminat dalam melakukan pembangunan 27 00:01:30,730 --> 00:01:34,442 dengan Swift, atau benar-benar apa-apa pembangunan aplikasi iOS, 28 00:01:34,442 --> 00:01:35,900 terdapat beberapa keperluan. 29 00:01:35,900 --> 00:01:39,940 Pertama sekali, anda perlu untuk menggunakan Mac, berjalan dalam contoh 30 00:01:39,940 --> 00:01:43,880 bahawa kita akan menggunakan hari ini, versi yang agak baru OS 31 00:01:43,880 --> 00:01:46,580 X. Dalam kes ini, saya berjalan X 10.5. 32 00:01:46,580 --> 00:01:48,600 Anda boleh berjalan 10.11 jika anda mahu. 33 00:01:48,600 --> 00:01:52,430 Tetapi segala-galanya yang anda akan lihat adalah yang melibatkan Xcode 7 dan kemudian, 34 00:01:52,430 --> 00:01:56,271 yang mempunyai versi terbaru Swift, yang Swift 2.0. 35 00:01:56,271 --> 00:01:58,270 Ini sebenarnya yang cukup perbezaan yang penting. 36 00:01:58,270 --> 00:02:01,510 Banyak sintaks mempunyai berubah cukup ketara 37 00:02:01,510 --> 00:02:05,890 dalam beberapa kes dari Swift 1.0, yang telah dilancarkan pada tahun lepas, 38 00:02:05,890 --> 00:02:08,514 untuk Swift 2.0, yang hanya keluar jatuh ini. 39 00:02:08,514 --> 00:02:09,889 Oleh itu, kita akan menunjukkan kepada Swift 2.0. 40 00:02:09,889 --> 00:02:13,020 Banyak perkara-perkara yang anda mencari dalam talian 41 00:02:13,020 --> 00:02:18,040 apabila anda cuba untuk mendapatkan tambahan maklumat mengenai pelbagai perkara, 42 00:02:18,040 --> 00:02:20,710 anda mungkin mahu jelas mencari Swift 2 43 00:02:20,710 --> 00:02:24,950 bukannya Swift sekadar lama untuk membuat memastikan bahawa anda mendapat sintaks yang betul. 44 00:02:24,950 --> 00:02:26,920 >> Malah, ini biasanya benar. 45 00:02:26,920 --> 00:02:31,210 Terdapat sejumlah pesat pembangunan berlaku dalam bahasa Swift 46 00:02:31,210 --> 00:02:35,110 sejak Apple mengeluarkan, saya fikir apa, ia telah sedikit lebih setahun 47 00:02:35,110 --> 00:02:36,370 sekarang. 48 00:02:36,370 --> 00:02:39,080 Dan perkara yang telah berubah secara mendadak pada masa itu. 49 00:02:39,080 --> 00:02:42,160 Dan sebagainya tidak kecewa jika, apabila anda melihat sekeliling 50 00:02:42,160 --> 00:02:48,310 untuk topik mengenai Swift atau bagaimana untuk mencapai sesuatu menggunakan beberapa kod contoh 51 00:02:48,310 --> 00:02:51,210 atau sesuatu yang ia tidak benar-benar bekerja pada Swift 2.0. 52 00:02:51,210 --> 00:02:53,790 Pastikan anda sedang mencari khusus untuk versi yang 53 00:02:53,790 --> 00:02:58,690 mencuba untuk mengurangkan kesan-kesan yang berbeza versi dan orang-orang macam perkara. 54 00:02:58,690 --> 00:03:02,470 >> Saya akan cuba untuk menunjukkan hanya beberapa perkara yang berbeza untuk versi yang lebih lama. 55 00:03:02,470 --> 00:03:03,970 Tetapi ia adalah sesuatu yang perlu diawasi. 56 00:03:03,970 --> 00:03:06,770 Itu mungkin akan menjadi salah satu sakit kepala terbesar 57 00:03:06,770 --> 00:03:11,010 yang anda akan mempunyai dengan Swift adalah mencari kod contoh yang lebih tua, walaupun hanya 58 00:03:11,010 --> 00:03:14,050 oleh beberapa bulan, cuba untuk menggunakan dalam projek yang lebih moden anda. 59 00:03:14,050 --> 00:03:15,430 Dan ia hanya semata-mata tidak berfungsi. 60 00:03:15,430 --> 00:03:18,530 Anda mendapat ralat pengkompil, sintaksis kesilapan, pelbagai barangan gila. 61 00:03:18,530 --> 00:03:21,580 Jadi hanya bersabar dengan itu, dan anda akan mudah-mudahan 62 00:03:21,580 --> 00:03:24,200 mempunyai pengalaman yang cukup baik dengan keseluruhan Swift. 63 00:03:24,200 --> 00:03:28,430 >> Sekarang anda boleh sebenarnya join-- dan saya berharap kita sebenarnya masih mempunyai ini year-- ini 64 00:03:28,430 --> 00:03:30,910 CS 50-an Apple app pasukan pembangunan, yang 65 00:03:30,910 --> 00:03:34,680 akan membolehkan anda untuk memasang apa-apa aplikasi yang anda buat pada peranti iOS anda. 66 00:03:34,680 --> 00:03:39,190 Jadi kita lihat di URL ini jika anda berminat untuk melakukannya. 67 00:03:39,190 --> 00:03:41,450 >> Jadi hanya beberapa perkara tentang Swift sendiri. 68 00:03:41,450 --> 00:03:43,580 Ia adalah bahasa yang disusun. 69 00:03:43,580 --> 00:03:45,870 Tetapi anda akan melihat bahawa beberapa ciri-ciri yang kita gunakan 70 00:03:45,870 --> 00:03:50,650 membolehkan ia digunakan juga dalam sedikit seperti yang ditafsirkan dengan cara juga. 71 00:03:50,650 --> 00:03:56,350 >> Banyak sintaks yang dipinjam dari C. Ia berdasarkan dan ditulis dalam C. 72 00:03:56,350 --> 00:04:00,400 Demikianlah kita akan melihat bahawa terdapat banyak bawa pulang 73 00:04:00,400 --> 00:04:04,450 dari pengetahuan sedia ada anda dari C yang kita boleh pelabuhan untuk Swift. 74 00:04:04,450 --> 00:04:07,290 >> Tetapi ada perkara yang membuat ia sangat berbeza daripada C. 75 00:04:07,290 --> 00:04:08,860 Ia sangat kuat ditaip. 76 00:04:08,860 --> 00:04:10,380 Ada pengurusan ingatan automatik. 77 00:04:10,380 --> 00:04:13,170 Anda tidak akan mempunyai untuk menggunakan malloc atau di mana percuma. 78 00:04:13,170 --> 00:04:15,110 Ia direka untuk keluasan. 79 00:04:15,110 --> 00:04:19,480 Jadi dalam erti kata lain, anda boleh menggunakannya dalam pelbagai konteks, daripada Apple Watch 80 00:04:19,480 --> 00:04:26,290 ke iPhone sepanjang jalan sehingga kepada OS X, dan juga beberapa pelayan, juga beberapa skrip. 81 00:04:26,290 --> 00:04:28,400 Tetapi kita akan melihat bahawa sokongan untuk skrip 82 00:04:28,400 --> 00:04:31,360 tidak cukup di sana lagi kerana ia adalah dalam bahasa-bahasa lain. 83 00:04:31,360 --> 00:04:34,930 Jadi kemungkinan besar anda akan menggunakan ini semata-mata untuk pembangunan 84 00:04:34,930 --> 00:04:37,060 pada Mac atau iPhone anda. 85 00:04:37,060 --> 00:04:40,150 >> Dan ia mempunyai banyak ciri-ciri moden. 86 00:04:40,150 --> 00:04:43,380 Dan banyak perkara-perkara ini adalah barangan yang kita akan cuba untuk menangani hari ini, 87 00:04:43,380 --> 00:04:47,590 tetapi juga topik kami yang terus-terang, kita boleh menumpukan keseluruhan kursus. 88 00:04:47,590 --> 00:04:50,140 Malah, CS 51, yang merupakan semester akan datang yang ditawarkan, 89 00:04:50,140 --> 00:04:53,990 memberi tumpuan banyak mengenai topik-topik ini yang dinyatakan di bawah. 90 00:04:53,990 --> 00:04:56,781 Jadi, anda boleh menghabiskan satu semester memahami perkara-perkara ini. 91 00:04:56,781 --> 00:04:58,530 Tetapi kita akan cuba untuk mendapatkan melalui mereka 92 00:04:58,530 --> 00:05:00,800 sekurang-kurangnya cukup bahawa anda boleh memahami apa yang 93 00:05:00,800 --> 00:05:03,700 berlaku apabila anda melihat pada program Swift 94 00:05:03,700 --> 00:05:07,310 dan dapat hack cara anda melaluinya untuk projek akhir. 95 00:05:07,310 --> 00:05:10,780 >> Sekarang salah satu cara yang terbaik yang anda boleh mendapatkan maklumat tambahan mengenai ini 96 00:05:10,780 --> 00:05:14,700 terus-terang sahaja melalui Apple menyediakan dokumentasi untuk Swift. 97 00:05:14,700 --> 00:05:16,930 Ada banyak API yang boleh didapati. 98 00:05:16,930 --> 00:05:21,170 Dan ini adalah asas rumah yang baik untuk anda untuk mencari, perkara-perkara tertentu yang 99 00:05:21,170 --> 00:05:23,020 mahu lakukan dengan API yang melibatkan iOS. 100 00:05:23,020 --> 00:05:26,350 Jika anda mahu menggunakan kamera untuk Contohnya, anda boleh mula mencari di sini, 101 00:05:26,350 --> 00:05:32,540 dan juga menggunakan Google dan Stack Limpahan seperti biasa. 102 00:05:32,540 --> 00:05:36,670 >> Sebarang pertanyaan mengenai ini sebelum kita melompat kanan dalam? 103 00:05:36,670 --> 00:05:37,880 Baiklah. 104 00:05:37,880 --> 00:05:38,700 Mari kita bergerak ke atas. 105 00:05:38,700 --> 00:05:42,620 >> Jadi pertama, saya mempunyai bilangan fail contoh. 106 00:05:42,620 --> 00:05:46,040 Dan saya akan cuba untuk melangkah melalui mereka agak cepat. 107 00:05:46,040 --> 00:05:49,190 Ini adalah fail Hello World untuk Swift. 108 00:05:49,190 --> 00:05:51,050 Ia amat mudah. 109 00:05:51,050 --> 00:05:54,360 Ada cara yang lebih komen daripada terdapat kod sebenar. 110 00:05:54,360 --> 00:05:57,100 Perhatikan kod sebenar adalah di bahagian paling bawah di talian 14. 111 00:05:57,100 --> 00:05:57,980 Ia mengatakan cetak. 112 00:05:57,980 --> 00:05:59,820 Dan kemudian ia panggilan fungsi. 113 00:05:59,820 --> 00:06:03,010 Kita lulus ke dalamnya rentetan dipanggil Hello cs50. 114 00:06:03,010 --> 00:06:04,750 Perhatikan bahawa tidak ada koma bertitik. 115 00:06:04,750 --> 00:06:07,010 Perhatikan bahawa tidak ada utama int. 116 00:06:07,010 --> 00:06:10,392 Ada tiada yang Cruft bahawa kita mempunyai dengan C. 117 00:06:10,392 --> 00:06:15,020 Apabila kita menggunakan Swift dengan cara ini, yang hanya ditulis dalam fail teks 118 00:06:15,020 --> 00:06:18,340 dan disimpan pada komputer saya, maka Saya boleh menyusun dan menjalankannya. 119 00:06:18,340 --> 00:06:20,920 >> Perhatikan bahawa di sini Saya tidak menggunakan IDE CS50. 120 00:06:20,920 --> 00:06:24,460 Ini menganggap bahawa saya berjalan dan bahawa saya pada OS X, 121 00:06:24,460 --> 00:06:27,870 dan bahawa saya telah Xcode telah dipasang pada mesin ini dalam usaha untuk ini 122 00:06:27,870 --> 00:06:29,080 untuk benar-benar berfungsi. 123 00:06:29,080 --> 00:06:33,349 Tetapi ini hanya fail teks biasa yang kita boleh menyusun dan mengedit. 124 00:06:33,349 --> 00:06:34,890 Jadi mari kita lihat bagaimana ini sebenarnya berfungsi. 125 00:06:34,890 --> 00:06:37,430 Bagaimana jika saya ingin menyusun? 126 00:06:37,430 --> 00:06:40,450 1.swift swiftc. 127 00:06:40,450 --> 00:06:42,960 Selepas seketika atau dua, ia akan melihat bahawa kita ada sekarang 128 00:06:42,960 --> 00:06:45,360 disusun ini ke dalam fail yang dipanggil 1. 129 00:06:45,360 --> 00:06:51,090 Dan sekarang kita telah dicetak CS50 kami, permohonan Hello World kami agak. 130 00:06:51,090 --> 00:06:54,690 >> Perhatikan satu perkara lain yang dengan baik adalah dengan lalai, 131 00:06:54,690 --> 00:07:00,090 kita tidak perlu input a / n untuk mencetak baris baru. 132 00:07:00,090 --> 00:07:05,315 Secara lalai, fungsi cetak dalam Swift akan mencetak baris baru untuk anda. 133 00:07:05,315 --> 00:07:09,284 Anda boleh lulus tambahan pilihan parameter untuk memberitahu ia tidak berbuat demikian. 134 00:07:09,284 --> 00:07:10,950 Tetapi Google untuk maklumat lanjut mengenai itu. 135 00:07:10,950 --> 00:07:13,450 Secara lalai, ia akan melakukan garis cetak. 136 00:07:13,450 --> 00:07:16,420 >> Baiklah, jadi mari kita beralih kemudian kepada beberapa perkara lain. 137 00:07:16,420 --> 00:07:18,620 Jadi bagaimana boleh kita benar-benar menentukan pembolehubah? 138 00:07:18,620 --> 00:07:21,960 Kita boleh melakukan itu menggunakan salah satu daripada dua kaedah. 139 00:07:21,960 --> 00:07:26,122 Dan salah satu yang saya ingin memberitahu anda tentang pertama adalah definisi let ini. 140 00:07:26,122 --> 00:07:27,830 Dan ini adalah penting kerana berkesan 141 00:07:27,830 --> 00:07:30,240 apa yang kita lakukan adalah menentukan pemalar. 142 00:07:30,240 --> 00:07:34,010 Kami akan mewujudkan pembolehubah, atau lebih tepat dipanggil nama yang tetap, 143 00:07:34,010 --> 00:07:38,200 menyediakan kepadanya beberapa data-- dalam kes ini, rentetan Dan itu. 144 00:07:38,200 --> 00:07:40,630 Tetapi dengan menggunakan let ini kata kunci, kita katakan 145 00:07:40,630 --> 00:07:43,860 bahawa ini variable-- atau lagi constant-- dipanggil 146 00:07:43,860 --> 00:07:46,220 nama tidak pernah akan berubah. 147 00:07:46,220 --> 00:07:50,120 Ia akan menjadi tidak berubah-ubah sepanjang tempoh program ini 148 00:07:50,120 --> 00:07:53,100 atau di seluruh tempoh konteksnya 149 00:07:53,100 --> 00:07:55,390 yang berubah-ubah yang boleh didapati. 150 00:07:55,390 --> 00:08:00,096 >> Ini adalah benar-benar penting bahawa apabila anda mempunyai beberapa data yang tidak 151 00:08:00,096 --> 00:08:02,970 akan berubah dalam program anda, dan anda akan melihat pelbagai contoh 152 00:08:02,970 --> 00:08:06,790 kira-kira apabila kita mahu menggunakan biarkan berbanding sintaks yang lain, 153 00:08:06,790 --> 00:08:11,040 ia adalah penting bahawa anda menggunakan biarlah mana mungkin kerana memberitahu ini 154 00:08:11,040 --> 00:08:13,740 bahasa yang ia adalah tidak akan berubah, 155 00:08:13,740 --> 00:08:16,590 dan ia sebenarnya boleh melakukan banyak pengoptimuman 156 00:08:16,590 --> 00:08:19,560 untuk meningkatkan kelajuan dan keselamatan program anda. 157 00:08:19,560 --> 00:08:24,480 Dan dengan keselamatan, maksud saya biarkan ia kemalangan dengan kesilapan gila 158 00:08:24,480 --> 00:08:27,910 bahawa kita mungkin biasa melihat dalam C. 159 00:08:27,910 --> 00:08:32,460 >> Maka kita boleh menggunakan rentetan interpolasi untuk merangkumi ini dalam rentetan. 160 00:08:32,460 --> 00:08:35,200 Oleh itu, kita boleh lihat dalam ini garis cetak, cetak hello, 161 00:08:35,200 --> 00:08:38,950 dan kemudian menggunakan garis sendeng terbalik parens terbuka, dan kemudian nama pembolehubah saya, 162 00:08:38,950 --> 00:08:41,809 dalam kes ini berterusan, menutup kurungan. 163 00:08:41,809 --> 00:08:46,400 Saya pada dasarnya kemudian meletakkan kandungan nama pembolehubah dipanggil ini 164 00:08:46,400 --> 00:08:50,240 dalam tali dan kemudian mencetak hasil di sana. 165 00:08:50,240 --> 00:08:54,070 >> Ada satu perubahan lain ke fail ini: yang yang saya ada, di bahagian paling atas, 166 00:08:54,070 --> 00:08:57,340 dimasukkan ke dalam garis shebang, yang pada dasarnya hanya menyatakan 167 00:08:57,340 --> 00:09:00,180 yang saya mahu untuk menggunakan Jurubahasa Swift, yang 168 00:09:00,180 --> 00:09:04,190 bermakna bahawa saya tidak lagi perlu menyusun program khusus ini. 169 00:09:04,190 --> 00:09:06,567 Saya hanya boleh berjalan seperti skrip sendiri. 170 00:09:06,567 --> 00:09:09,400 Tetapi ini, dalam kes ini, di belakang tabir sedang disusun dan kemudian 171 00:09:09,400 --> 00:09:10,030 diuruskan. 172 00:09:10,030 --> 00:09:13,540 Ia hanya dapat dilihat dengan kami. 173 00:09:13,540 --> 00:09:15,880 >> Baiklah, jadi mari kita beralih. 174 00:09:15,880 --> 00:09:19,650 Jadi ada sedikit tipu muslihat yang hanya berlaku sebelum ini. 175 00:09:19,650 --> 00:09:23,230 Aku membawa kepadamu bahawa saya boleh menentukan pemalar. 176 00:09:23,230 --> 00:09:25,490 Dan saya boleh memberi sedikit data untuk melakukannya. 177 00:09:25,490 --> 00:09:29,240 Tetapi dalam kes ini, notis bahawa saya tidak sebenarnya menentukan jenis data 178 00:09:29,240 --> 00:09:29,820 bahawa ia adalah. 179 00:09:29,820 --> 00:09:32,780 Dan itu kerana pengkompil, Swift boleh 180 00:09:32,780 --> 00:09:36,910 membuat kesimpulan jenis data hanya berdasarkan data yang saya masukkan ke dalamnya. 181 00:09:36,910 --> 00:09:41,760 Kerana ia tahu bahawa dengan menilai ini berubah-ubah di sini, ini buat data 182 00:09:41,760 --> 00:09:43,370 di sini, ia tahu bahawa ia adalah rentetan. 183 00:09:43,370 --> 00:09:48,690 Dan supaya nama malar ini Oleh itu, adalah akan menjadi rentetan juga. 184 00:09:48,690 --> 00:09:52,730 >> Tetapi kita juga boleh menjadi jelas tentang jenis itu 185 00:09:52,730 --> 00:09:55,790 kita akan gunakan untuk pemalar atau pembolehubah 186 00:09:55,790 --> 00:10:01,590 dengan menggunakan sintaks ini instead-- biarkan String nama kolon sama 187 00:10:01,590 --> 00:10:05,530 Dan, yang dalam kes ini bermakna kami akan menentukan menamai yang tetap. 188 00:10:05,530 --> 00:10:07,150 Ia akan menjadi jenis tali. 189 00:10:07,150 --> 00:10:10,550 Dan nilai yang akan menjadi Dan. 190 00:10:10,550 --> 00:10:12,550 Sekarang cara lain yang kita boleh membuat variables-- 191 00:10:12,550 --> 00:10:15,549 dan ini adalah pembolehubah yg mungkin berubah, yang bermakna bahawa kita adalah, sebenarnya, akan 192 00:10:15,549 --> 00:10:19,670 untuk menukar kandungan mereka kadang-kadang dalam tempoh konteksnya 193 00:10:19,670 --> 00:10:23,890 yang berubah-ubah yang defined-- kita menggunakan kata kunci var dan bukannya membiarkan. 194 00:10:23,890 --> 00:10:27,400 Tetapi sekali lagi, secara lalai, kecuali anda tahu bahawa anda perlu untuk memanipulasi data itu, 195 00:10:27,400 --> 00:10:30,510 cuba menggunakan biarlah untuk peningkatan prestasi. 196 00:10:30,510 --> 00:10:33,740 >> Dalam kes ini, saya boleh kemudian nyatakan jenis data 197 00:10:33,740 --> 00:10:37,650 yang kita harapkan untuk menjadi bahagian dalam pembolehubah baru ini dipanggil label. 198 00:10:37,650 --> 00:10:38,800 Ia akan menjadi rentetan. 199 00:10:38,800 --> 00:10:43,030 Dan kita akan kemudian concatenate dua tali bersama-sama, tali hello, 200 00:10:43,030 --> 00:10:48,070 dan tali yang diwakili oleh berubah-ubah, atau lebih tepat nama yang berterusan. 201 00:10:48,070 --> 00:10:50,660 >> Jadi ini adalah baik kerana ini agak PHP seperti dalam kita yang 202 00:10:50,660 --> 00:10:52,250 mempunyai tali dinamika sangat mudah. 203 00:10:52,250 --> 00:10:56,350 Kami tidak mempunyai untuk secara automatik menggunakan apa-apa jenis pengurusan ingatan 204 00:10:56,350 --> 00:11:00,580 untuk meningkatkan saiz dan melakukan apa-apa jenis perkara-perkara lucu di sana. 205 00:11:00,580 --> 00:11:05,040 Ini kerja-kerja seperti yang kita benar-benar inginkan. 206 00:11:05,040 --> 00:11:09,370 >> Baiklah, apa-apa soalan mengenai perkara ini? 207 00:11:09,370 --> 00:11:12,520 >> Sekarang sebab lain yang kami memerlukan anda mempunyai keupayaan 208 00:11:12,520 --> 00:11:15,490 dapat menentukan apa Jenis pembolehubah data adalah 209 00:11:15,490 --> 00:11:18,170 kerana kadang-kadang kita tidak mahu untuk memulakan pembolehubah 210 00:11:18,170 --> 00:11:21,080 dengan beberapa data di titik definisi. 211 00:11:21,080 --> 00:11:23,500 Jadi dalam kes ini, katakan yang saya ingin memulakan memasukkan 212 00:11:23,500 --> 00:11:25,040 beberapa gred ke dalam sebuah buku gred. 213 00:11:25,040 --> 00:11:27,530 Well, saya tahu bahawa salah satu pembolehubah yang saya mahu menjadi 214 00:11:27,530 --> 00:11:30,280 akan menjadi gred yg mungkin berubah. 215 00:11:30,280 --> 00:11:33,010 Dan kita juga tahu bahawa kita mahu ia menjadi integer. 216 00:11:33,010 --> 00:11:36,030 Tetapi mungkin kita tidak lagi mempunyai gred yang disediakan. 217 00:11:36,030 --> 00:11:39,570 >> Dalam Swift, anda perlu untuk menentukan jenis data 218 00:11:39,570 --> 00:11:44,000 yang dikaitkan dengan berubah-ubah atau biarkan berterusan 219 00:11:44,000 --> 00:11:47,840 sebelum anda boleh sebenarnya menggunakan pembolehubah itu. 220 00:11:47,840 --> 00:11:51,170 Oleh kerana ia adalah sangat ditaip, anda perlu mengaitkan jenis yang 221 00:11:51,170 --> 00:11:52,890 dengan pembolehubah ini. 222 00:11:52,890 --> 00:11:56,120 >> Jadi dalam kes ini, jika saya tidak ada betul dimulakan pertama dengan beberapa nilai, 223 00:11:56,120 --> 00:12:00,520 maka saya perlu memberitahu Swift apa Saya menjangkakan jenis data untuk menjadi. 224 00:12:00,520 --> 00:12:02,650 Dan ia akan kekal yang sama jenis data 225 00:12:02,650 --> 00:12:05,780 dalam sejarah program ini. 226 00:12:05,780 --> 00:12:10,050 >> Sekarang anda mungkin akan terdorong dengan seberapa segera yang Saya telah mencipta pembolehubah gred ini 227 00:12:10,050 --> 00:12:13,530 dan dengan syarat bahawa ini adalah integer 100, sekarang jika saya 228 00:12:13,530 --> 00:12:18,540 ingin mencuba untuk menyatukan rentetan dengan integer itu, 229 00:12:18,540 --> 00:12:21,610 mungkin akan terdorong untuk masih menggunakan bahawa pengendali tali dinamika 230 00:12:21,610 --> 00:12:24,500 seperti yang kami lakukan hanya beberapa baris sebelum ini. 231 00:12:24,500 --> 00:12:26,460 Tetapi malangnya, ini akan sebenarnya tidak 232 00:12:26,460 --> 00:12:29,270 bekerja, kerana anda adalah dasarnya melaksanakan 233 00:12:29,270 --> 00:12:32,380 operasi kepada dua jenis yang berbeza. 234 00:12:32,380 --> 00:12:36,856 >> Sekarang ini adalah sangat berbeza dari yang lain bahasa seperti PHP yang benar-benar 235 00:12:36,856 --> 00:12:38,480 tolol loosey dengan mereka sort jenis. 236 00:12:38,480 --> 00:12:40,030 Mereka hanya suka, ya, apa pun, saya tidak peduli. 237 00:12:40,030 --> 00:12:42,710 Tetapi berilah satu jenis, dan mungkin saya akan melakukan perkara yang betul. 238 00:12:42,710 --> 00:12:46,060 >> Dalam kes ini, Swift adalah sangat ketat mengenai jenis 239 00:12:46,060 --> 00:12:47,350 bahawa anda berurusan dengan. 240 00:12:47,350 --> 00:12:50,700 Ini pengendali penjumlahan atau pengendali dinamika 241 00:12:50,700 --> 00:12:54,400 mempunyai asasnya beberapa pilihan yang berbeza mungkin. 242 00:12:54,400 --> 00:12:56,970 Anda boleh melakukan penjumlahan dengan bilangan bulat, atau anda 243 00:12:56,970 --> 00:13:00,870 boleh lakukan rentetan dinamika dan mungkin beberapa perkara lain juga. 244 00:13:00,870 --> 00:13:05,550 Tetapi jika pengendali itu tidak mengiktiraf apa yang ada di sebelah sama ada ia, 245 00:13:05,550 --> 00:13:10,452 atau sebaliknya gabungan mereka dua jenis, tidak apa yang ia menjangkakan, 246 00:13:10,452 --> 00:13:11,910 maka ia akan menyebabkan kegagalan. 247 00:13:11,910 --> 00:13:16,690 >> Jadi dalam kes ini, apa yang dimaksudkan mempunyai tali plus integer? 248 00:13:16,690 --> 00:13:18,880 Baik dalam konteks ini, kita mungkin mahu 249 00:13:18,880 --> 00:13:21,990 untuk melakukan operasi rentetan dinamika. 250 00:13:21,990 --> 00:13:26,420 Tetapi sudah tentu komputer tidak mempunyai bahawa jenis konteks. 251 00:13:26,420 --> 00:13:29,950 Dan dengan itu kita perlu menyediakan bahawa maklumat tambahan 252 00:13:29,950 --> 00:13:32,390 membiarkan ia tahu apa yang ia ialah kita mahu lakukan. 253 00:13:32,390 --> 00:13:36,860 >> Jadi dalam erti kata lain, hakikat yang Swift amat ditaip 254 00:13:36,860 --> 00:13:39,520 bermakna anda perlu melakukan sedikit sedikit kerja tambahan 255 00:13:39,520 --> 00:13:42,100 untuk mendapatkannya untuk mengendalikan cara yang anda mahu. 256 00:13:42,100 --> 00:13:43,710 Tetapi hasilnya, ia adalah lebih selamat. 257 00:13:43,710 --> 00:13:46,290 Dan sebaik sahaja anda mengambil kira orang-orang jenis, 258 00:13:46,290 --> 00:13:49,300 perkara yang hanya terus-terang mula untuk bekerja dengan baik. 259 00:13:49,300 --> 00:13:52,520 >> Jadi dalam kes ini, maka kita akan melaksanakan rentetan dinamika 260 00:13:52,520 --> 00:13:56,040 dengan jelas pemutus integer kepada rentetan 261 00:13:56,040 --> 00:13:58,490 dengan membungkus dalam ini modal S String fungsi, 262 00:13:58,490 --> 00:14:03,510 dan kemudian menggunakan dinamika tali pengendali untuk mengubah pembolehubah label kami, 263 00:14:03,510 --> 00:14:06,280 dan kemudian mencetak. 264 00:14:06,280 --> 00:14:08,420 >> Setakat ini, begitu baik? 265 00:14:08,420 --> 00:14:12,020 Baiklah, mari kita bergerak ke atas. 266 00:14:12,020 --> 00:14:16,300 >> Kini terdapat pelbagai data jenis yang boleh kita gunakan dalam Swift. 267 00:14:16,300 --> 00:14:21,620 Seperti yang anda telah menjadi biasa dengan, kita boleh membuat pelbagai yg mungkin berubah. 268 00:14:21,620 --> 00:14:26,140 Dan lokasi yang hanya boleh mengandungi satu jenis. 269 00:14:26,140 --> 00:14:30,360 >> Jadi dalam kes ini, kita akan mewujudkan satu tatasusunan yg mungkin berubah integer, yang 270 00:14:30,360 --> 00:14:34,800 kami akan menghubungi gred, dan kami akan dapat untuk menyimpan bahawa dalam kurungan persegi ini 271 00:14:34,800 --> 00:14:38,650 format seperti anda telah berkembang biasa ke dalam pelbagai bahasa lain. 272 00:14:38,650 --> 00:14:41,150 Tetapi perhatikan bahawa di sini kita berada menentukan beberapa perkara. 273 00:14:41,150 --> 00:14:45,350 gred adalah variable-- yg mungkin berubah kita tidak menggunakan kata kunci let itu. 274 00:14:45,350 --> 00:14:49,620 Ini bermakna kita boleh mengubah suai kandungan pelbagai ini. 275 00:14:49,620 --> 00:14:53,420 Ia adalah jenis Array Int, dan kami mengetahui perkataan yang 276 00:14:53,420 --> 00:14:56,260 berdasarkan kurungan persegi di sini. 277 00:14:56,260 --> 00:14:58,930 >> Sekarang salah satu perkara yang baik tentang ini adalah bahawa kita 278 00:14:58,930 --> 00:15:02,310 mempunyai akses kepada banyak informasi tambahan 279 00:15:02,310 --> 00:15:07,110 tentang array hanya menggunakan beberapa notasi dot mudah. 280 00:15:07,110 --> 00:15:10,500 Jadi, sebagai contoh, grades.count menyediakan kepada kami 281 00:15:10,500 --> 00:15:14,820 bilangan item yang wujud dalam yang pelbagai, yang kita boleh mengakses cantik 282 00:15:14,820 --> 00:15:19,090 mudah hanya menggunakan bahawa notasi titik. 283 00:15:19,090 --> 00:15:21,830 >> Jika anda ingin menambah tambahan barangan kepada pelbagai ini, 284 00:15:21,830 --> 00:15:27,220 anda tidak boleh melakukan gaya PHP di mana anda hanya menentukan dengan jelas, 285 00:15:27,220 --> 00:15:30,910 pada indeks yang diberikan, beberapa nilai yang anda mahu masukkan. 286 00:15:30,910 --> 00:15:37,210 Sebaliknya, gunakan tambah yang kaedah dalam jenis array 287 00:15:37,210 --> 00:15:40,920 untuk menambah item, 95, ke senarai ini. 288 00:15:40,920 --> 00:15:45,990 >> Jadi sekarang pelbagai ini mempunyai pengikut yang contents-- 100, 0, 90, 85. 289 00:15:45,990 --> 00:15:49,270 Dan sekarang kami telah dilampirkan 95 untuk itu juga. 290 00:15:49,270 --> 00:15:51,830 >> Terdapat cara lain kita boleh menambah sesuatu. 291 00:15:51,830 --> 00:15:55,030 Anda sebenarnya boleh menggunakan pengendali penjumlahan, 292 00:15:55,030 --> 00:15:59,200 yang akan ditafsirkan sebagai operasi mudah tambah. 293 00:15:59,200 --> 00:16:04,680 Dan anda boleh menambah satu lagi pelbagai, yang mempunyai kandungan 70 dan 80, 294 00:16:04,680 --> 00:16:05,560 untuk pelbagai itu. 295 00:16:05,560 --> 00:16:08,250 Jadi sekarang kita mempunyai kandungan dalam pembolehubah ini 296 00:16:08,250 --> 00:16:17,220 grades-- 100, 0, 90, 85, 95, 70, dan 80. 297 00:16:17,220 --> 00:16:21,850 Ini hanyalah sintaksis baik sedikit gula yang Swift memberikan kepada kami. 298 00:16:21,850 --> 00:16:23,850 >> Jadi, jika kita ingin menjumlahkan gred, kami mungkin 299 00:16:23,850 --> 00:16:27,340 akan mahu untuk melelar atas setiap item dalam gelung ini. 300 00:16:27,340 --> 00:16:32,150 Dan kita mempunyai, dalam Swift, tanggapan daripada untuk gelung seperti yang anda inginkan. 301 00:16:32,150 --> 00:16:35,350 Tetapi cara kita menunjukkan pelbagai adalah sedikit berbeza. 302 00:16:35,350 --> 00:16:37,790 Jadi dalam kes ini, untuk kesimpulan segala-galanya, kita akan 303 00:16:37,790 --> 00:16:40,650 akan mewujudkan sementara pembolehubah dipanggil jumlah dalam usaha kita 304 00:16:40,650 --> 00:16:42,580 untuk mengekalkan kiraan ini. 305 00:16:42,580 --> 00:16:44,430 >> Dan perhatikan untuk kami pembinaan gelung di sini. 306 00:16:44,430 --> 00:16:46,820 Bagi indeks dalam 0 .. 00:16:51,480 308 00:16:51,480 --> 00:16:57,390 Jadi pembinaan ini, 0 .. 00:17:01,860 mengatakan bahawa kita akan membuat pelbagai integer dari 0 sehingga 310 00:17:01,860 --> 00:17:05,750 tetapi tidak termasuk grades.count. 311 00:17:05,750 --> 00:17:09,577 Jadi ini akan menjadi 0, 1, 2, 3, 4, 5, sehingga bagaimanapun banyak salah 312 00:17:09,577 --> 00:17:10,410 sebelum grades.count. 313 00:17:10,410 --> 00:17:14,160 >> Jadi ini adalah berbeza daripada cara kami biasanya akan digunakan untuk gelung 314 00:17:14,160 --> 00:17:18,569 di mana anda akan mempunyai beberapa indeks berubah-ubah, menetapkan ia sama dengan 0 pada mulanya, 315 00:17:18,569 --> 00:17:25,480 dan kemudian mengintegrasikan sehingga beberapa nilai kurang daripada kiraan barangan 316 00:17:25,480 --> 00:17:27,140 dalam pelbagai itu. 317 00:17:27,140 --> 00:17:29,820 >> Jadi ada pengubahsuaian ini, sebenarnya, 318 00:17:29,820 --> 00:17:35,010 yang membolehkan kita untuk dengan mudah menetapkan jenis julat. 319 00:17:35,010 --> 00:17:40,570 Jika anda menukar julat ini untuk tiga titik, 0 ... grade.count, 320 00:17:40,570 --> 00:17:45,120 ini mewakili julat 0 untuk grades.count inklusif, 321 00:17:45,120 --> 00:17:49,260 yang bermaksud bahawa jumlah itu juga maka termasuk dalam julat itu. 322 00:17:49,260 --> 00:17:52,110 >> Tetapi ini adalah sangat berguna untuk perkara-perkara yang tepat, 323 00:17:52,110 --> 00:17:54,590 apabila kita perlu melakukan lelaran lebih gelung 324 00:17:54,590 --> 00:17:59,630 kerana orang-orang indeks adalah sifar diindeks, seperti yang kita lihat dalam bahasa lain 325 00:17:59,630 --> 00:18:02,360 juga. 326 00:18:02,360 --> 00:18:05,210 Sebarang pertanyaan mengenai perkara ini untuk gelung? 327 00:18:05,210 --> 00:18:10,660 >> Jadi ada definisi tersirat pembolehubah indeks ini, 328 00:18:10,660 --> 00:18:14,350 nilai yang bermula pada 0, dan berterusan pada setiap lelaran gelung 329 00:18:14,350 --> 00:18:17,950 meningkat sebanyak 1 sehingga mata yang sama dengan grades.count, 330 00:18:17,950 --> 00:18:20,380 di mana titik, gelung itu akan berhenti. 331 00:18:20,380 --> 00:18:23,730 >> Perhatikan bahawa dalam rentetan kami interpolasi sini, 332 00:18:23,730 --> 00:18:26,910 kita benar-benar boleh melakukan beberapa mudah manipulasi kepada nilai. 333 00:18:26,910 --> 00:18:31,230 Jadi indeks ditambah 1 akan sebenarnya melakukan penjumlahan nilai yang 334 00:18:31,230 --> 00:18:34,780 kerana indeks adalah, dalam kes ini, bilangan bulat. 335 00:18:34,780 --> 00:18:37,810 Dan pada ketika itu, ia akan kemudian ditukar kepada rentetan 336 00:18:37,810 --> 00:18:42,230 dan penentu ke dalam tali ini di sini, dan dicetak seperti yang kita jangkakan. . 337 00:18:42,230 --> 00:18:44,520 >> Dan perkara yang baik tentang tatasusunan di sini adalah 338 00:18:44,520 --> 00:18:50,730 bahawa kita juga mampu untuk mempunyai nilai semasa mengambil dan nilai menetapkan 339 00:18:50,730 --> 00:18:54,080 menggunakan notasi kurungan persegi sebagai yang kami telah lihat dalam bahasa-bahasa lain juga. 340 00:18:54,080 --> 00:18:57,130 341 00:18:57,130 --> 00:19:01,030 >> Baiklah, jadi dari sini, kita kini mengira jumlah kami semua gred kami. 342 00:19:01,030 --> 00:19:02,780 Sekarang semacam seterusnya langkah logik akan 343 00:19:02,780 --> 00:19:07,580 untuk melakukan operasi bahagian untuk mencari daripada purata mereka gred. 344 00:19:07,580 --> 00:19:10,150 Tetapi sesuatu yang penting di sini yang sedang berlaku yang 345 00:19:10,150 --> 00:19:15,020 adalah bahawa jumlah ini mungkin integer. 346 00:19:15,020 --> 00:19:18,020 Tetapi kita perlu melaksanakan beberapa jenis bahagian dua kali ganda. 347 00:19:18,020 --> 00:19:20,600 Dan ini akan menjadi amat penting apabila 348 00:19:20,600 --> 00:19:24,140 kita mahu melakukan operasi ini, kerana apa yang kita katakan 349 00:19:24,140 --> 00:19:28,430 ialah kita perlu untuk benar-benar melaksanakan pembahagian kepada dua beregu. 350 00:19:28,430 --> 00:19:31,370 Dan sekali lagi, kerana Swift sangat kuat ditaip, 351 00:19:31,370 --> 00:19:36,760 kita jelas mesti menetapkan semua perkara untuk beregu sebelum kita benar-benar 352 00:19:36,760 --> 00:19:38,300 melakukan pembedahan itu. 353 00:19:38,300 --> 00:19:40,550 >> Jadi, dalam usaha untuk kita melaksanakan bahagian dua, 354 00:19:40,550 --> 00:19:43,730 ia tidak mencukupi untuk hanya satu item-item untuk menjadi dua kali. 355 00:19:43,730 --> 00:19:46,400 Kedua-dua mereka perlu menjadi seorang double agar pantas 356 00:19:46,400 --> 00:19:50,860 untuk memastikan bahawa ini adalah apa yang kita mahu lakukan. 357 00:19:50,860 --> 00:19:54,360 Oleh itu, kita akan secara jelas typecast maka jumlah wang yang kami telah dikira di atas 358 00:19:54,360 --> 00:19:58,970 dan kiraan gred untuk beregu, dan kemudian melaksanakan operasi dan stor 359 00:19:58,970 --> 00:20:02,390 itu ke dalam pembolehubah baru ini, atau sebaliknya berterusan baru ini dipanggil purata, 360 00:20:02,390 --> 00:20:06,810 yang akan mempunyai apa jenis, anda bayangkan? 361 00:20:06,810 --> 00:20:07,587 Double, ya. 362 00:20:07,587 --> 00:20:09,420 Jadi dalam kes ini, kita tidak perlu menentukan ia 363 00:20:09,420 --> 00:20:13,450 kerana ia boleh disimpulkan daripada operasi jenis purata data apa 364 00:20:13,450 --> 00:20:14,730 akan jadi. 365 00:20:14,730 --> 00:20:19,025 Dan Swift umumnya cukup baik mengenai kemampuan untuk membuat kesimpulan jenis. 366 00:20:19,025 --> 00:20:22,116 367 00:20:22,116 --> 00:20:24,200 >> Adakah anda mahu melihat ini berlari, atau boleh saya bergerak? 368 00:20:24,200 --> 00:20:25,640 Saya hendak teruskan. 369 00:20:25,640 --> 00:20:28,130 Sebarang pertanyaan mengenai apa-apa ini? 370 00:20:28,130 --> 00:20:28,630 Yang besar. 371 00:20:28,630 --> 00:20:31,160 372 00:20:31,160 --> 00:20:35,010 >> Sekarang kita akan mula untuk sampai ke baik fungsi takrifan stuff--, 373 00:20:35,010 --> 00:20:39,090 dan beberapa jenis lain yang unik untuk Swift bahawa anda tidak mempunyai 374 00:20:39,090 --> 00:20:41,620 lihat dalam bahasa lain sehingga ketika ini, 375 00:20:41,620 --> 00:20:46,290 tetapi mereka hadir dalam lain-lain bahasa yang anda mungkin dapati di kemudian hari. 376 00:20:46,290 --> 00:20:48,210 Jadi pertama jika anda mahu untuk menentukan fungsi, 377 00:20:48,210 --> 00:20:52,170 anda menentukan dengan perkataan funky fungsi, dan kemudian nama fungsi, 378 00:20:52,170 --> 00:20:56,710 dan kemudian dalam kurungan, hujah-hujah yang anda mahu fungsi yang menerima. 379 00:20:56,710 --> 00:21:00,280 Hujah-hujah yang mesti juga specify-- generally-- 380 00:21:00,280 --> 00:21:05,010 juga mesti menentukan jenis data yang mereka berada, kecuali jika mereka boleh disimpulkan. 381 00:21:05,010 --> 00:21:07,500 Dan kita akan melihat bahawa sedikit kaveat yang hanya sedikit. 382 00:21:07,500 --> 00:21:09,920 >> Jadi dalam kes ini kita mempunyai fungsi dipanggil printGradeCount. 383 00:21:09,920 --> 00:21:12,840 Kami akan menerima variable-- atau sebaliknya dalam kes ini, 384 00:21:12,840 --> 00:21:14,450 constant-- yang dipanggil gradebook. 385 00:21:14,450 --> 00:21:18,517 Dan ia akan menjadi menaip pelbagai integer. 386 00:21:18,517 --> 00:21:20,600 Sekarang ada sesuatu itu benar-benar penting di sini 387 00:21:20,600 --> 00:21:21,849 yang saya mahu anda untuk memahami. 388 00:21:21,849 --> 00:21:27,560 Itu adalah bahawa secara lalai, hujah-hujah ini yang merupakan input kepada fungsi ini 389 00:21:27,560 --> 00:21:34,380 ditakrifkan dengan kata kunci let tersirat, yang bermaksud bahawa saya tidak boleh mengubah suai ini 390 00:21:34,380 --> 00:21:39,850 berubah-ubah gradebook sini. 391 00:21:39,850 --> 00:21:43,360 Dan yang jenis masuk akal, kerana anda lulus data dalam. 392 00:21:43,360 --> 00:21:45,860 Dan anda mungkin tidak mahu ia ditukar dari bawah anda. 393 00:21:45,860 --> 00:21:50,800 Ia adalah mungkin untuk menyebut dengan jelas bahawa ini adalah satu pemboleh ubah dengan meletakkan 394 00:21:50,800 --> 00:21:52,070 kata kunci var di sini. 395 00:21:52,070 --> 00:21:56,832 Tetapi itu adalah gotcha bahawa kami telah orang perasan telah dilakukan pada masa lalu 396 00:21:56,832 --> 00:21:59,790 ialah mereka menganggap bahawa ia akan sebagai pembolehubah apabila, pada hakikatnya, ia 397 00:21:59,790 --> 00:22:02,640 ialah pemalar. 398 00:22:02,640 --> 00:22:07,340 >> Baiklah, jadi di sini itu, dalam kes ini, kita tidak menyatakan apa-apa jenis balasan. 399 00:22:07,340 --> 00:22:09,460 Kami akan menunjukkan kepada anda bagaimana untuk melakukannya bahawa dalam hanya seketika. 400 00:22:09,460 --> 00:22:12,340 Tetapi perhatikan bahawa di sini kita mempunyai hanya yang mudah jika keadaan. 401 00:22:12,340 --> 00:22:14,560 Jika gradebook adalah kosong, yang dalam kes ini 402 00:22:14,560 --> 00:22:19,310 hanya kepunyaan integer ini pelbagai, maka kita mencetak sesuatu. 403 00:22:19,310 --> 00:22:23,100 Jika tidak, kita melakukan sesuatu yang lain. 404 00:22:23,100 --> 00:22:25,000 >> Cukup mudah setakat ini saya fikir. 405 00:22:25,000 --> 00:22:27,960 Hentikanlah saya jika anda mempunyai sebarang pertanyaan. 406 00:22:27,960 --> 00:22:33,350 >> Sekarang fungsi ini, purata, juga mengambil beberapa hujah-hujah, atau sebaliknya satu hujah, 407 00:22:33,350 --> 00:22:37,507 yang gradebook, dan masa ini akan kembali jenis kelamin. 408 00:22:37,507 --> 00:22:39,340 Kerana ia mengira purata dan ia 409 00:22:39,340 --> 00:22:45,010 akan benar-benar kembali yang purata dikira ke garisan memanggil. 410 00:22:45,010 --> 00:22:50,070 >> Dalam kes ini, kita menentukan kembali selepas jenis anak panah. 411 00:22:50,070 --> 00:22:53,260 Dan ini mungkin merasa jenis pelik pada mulanya. 412 00:22:53,260 --> 00:22:55,610 Anda telah berkembang biasa untuk menetapkan pulangan 413 00:22:55,610 --> 00:22:57,720 menaip sebelum nama fungsi. 414 00:22:57,720 --> 00:23:00,310 Tetapi jika anda berfikir ini dari segi matematik, 415 00:23:00,310 --> 00:23:03,320 seperti apabila anda mempunyai matematik yang menentukan fungsi, 416 00:23:03,320 --> 00:23:06,807 anda mempunyai fungsi dengan beberapa input, dan ia menghasilkan output. 417 00:23:06,807 --> 00:23:08,890 Dan itulah apa yang ini sepatutnya untuk meniru. 418 00:23:08,890 --> 00:23:12,460 Dan ada beberapa bahasa lain yang mempunyai sintaks yang sama juga, 419 00:23:12,460 --> 00:23:15,674 tetapi mungkin ada yang anda telah lihat dalam CS50. 420 00:23:15,674 --> 00:23:17,090 Tetapi masih tidak boleh dikelirukan olehnya. 421 00:23:17,090 --> 00:23:21,650 Anak panah bermakna apa yang sedang berlaku hendaklah dikembalikan dalam kes ini. 422 00:23:21,650 --> 00:23:23,650 OK, jadi bagaimana kita akan untuk mengira purata ini? 423 00:23:23,650 --> 00:23:25,649 Nah, jika gradebook yang kosong, dan kemudian kami 424 00:23:25,649 --> 00:23:30,731 akan kembali 0, yang mungkin cara yang munasabah untuk merawat ini. 425 00:23:30,731 --> 00:23:32,980 Saya tidak tahu, mari kita datang kembali kepada yang dalam sedikit. 426 00:23:32,980 --> 00:23:34,688 Ini tidak boleh benar-benar menjadi cara yang munasabah 427 00:23:34,688 --> 00:23:38,310 untuk mengira purata jika kita mempunyai gradebook kosong. 428 00:23:38,310 --> 00:23:41,260 >> Maka kita hanya akan melaksanakan penjumlahan kami. 429 00:23:41,260 --> 00:23:43,900 Perhatikan bahawa di sini kita sebenarnya mempunyai versi silih ganti yang 430 00:23:43,900 --> 00:23:49,190 untuk gelung, yang membolehkan kita untuk melelar atas setiap item tunggal dalam array 431 00:23:49,190 --> 00:23:53,630 dan meletakkan setiap elemen ke dalam pembolehubah sendiri. 432 00:23:53,630 --> 00:23:56,200 Dengan menentukan gred dalam gradebook, apa yang kita katakan 433 00:23:56,200 --> 00:24:00,560 adalah bahawa kita akan tersirat membuat malar baru yang dikenali sebagai 434 00:24:00,560 --> 00:24:05,180 gred yang akan mewakili setiap item yang unik di gradebook yang 435 00:24:05,180 --> 00:24:06,769 setiap kali secara lelaran gelung. 436 00:24:06,769 --> 00:24:08,560 Jadi kali pertama ia berjalan, gred akan 437 00:24:08,560 --> 00:24:09,800 menjadi item pertama dalam gradebook itu. 438 00:24:09,800 --> 00:24:12,300 Kali kedua ia akan menjadi yang Perkara kedua, jadi dan sebagainya 439 00:24:12,300 --> 00:24:15,970 sehingga gradebook mempunyai habis dirinya daripada unsur-unsur. 440 00:24:15,970 --> 00:24:20,390 Maka kita akan dapat kesimpulan bahawa gred ke dalam pembolehubah penjumlahan kami 441 00:24:20,390 --> 00:24:22,570 dan kembali purata kita seperti yang kita lihat sebelum ini. 442 00:24:22,570 --> 00:24:25,670 443 00:24:25,670 --> 00:24:26,950 OK, apa-apa soalan? 444 00:24:26,950 --> 00:24:27,699 Ya? 445 00:24:27,699 --> 00:24:28,990 PENONTON: Saya mempunyai dua soalan. 446 00:24:28,990 --> 00:24:33,586 Nombor satu, hipotesis, boleh anda menjalankan integer pada peranti ini? 447 00:24:33,586 --> 00:24:35,604 Tidak perlu menjadi seorang dua, betul? 448 00:24:35,604 --> 00:24:37,520 DAN AMRMENDARIZ: Bolehkah anda mengulangi soalan itu? 449 00:24:37,520 --> 00:24:39,587 PENONTON: Bolehkah saya melakukan integer sebagai purata? 450 00:24:39,587 --> 00:24:41,670 DAN AMRMENDARIZ: Bolehkah anda melakukan integer sebagai purata? 451 00:24:41,670 --> 00:24:45,015 Jadi kembali integer purata daripada dua? 452 00:24:45,015 --> 00:24:48,204 >> PENONTON: Return-- anda mempunyai bahawa sekarang di bawah. 453 00:24:48,204 --> 00:24:49,870 DAN AMRMENDARIZ: Di sini, kembali 0.0? 454 00:24:49,870 --> 00:24:51,790 PENONTON: Ya, hanya kembali 0. 455 00:24:51,790 --> 00:24:56,590 Oleh itu, ia akan sama ada 80 atau 85, tetapi tidak 85.2. 456 00:24:56,590 --> 00:24:59,465 >> DAN AMRMENDARIZ: Jadi dalam kes itu, jadi ada pasangan cara yang berbeza 457 00:24:59,465 --> 00:25:00,090 untuk menjawab itu. 458 00:25:00,090 --> 00:25:02,760 Izinkan saya menjawab mereka teratur. 459 00:25:02,760 --> 00:25:06,740 Jadi, jika saya hanya membuat nyata ini 0, 0 adalah satu nilai integer. 460 00:25:06,740 --> 00:25:09,730 Dan sebagainya yang akan menyebabkan ralat jenis untuk kes ini 461 00:25:09,730 --> 00:25:13,210 kerana ia mengharapkan dua tetapi kemudian kembali integer. 462 00:25:13,210 --> 00:25:16,770 Jika saya mahu kembali integer, saya boleh. 463 00:25:16,770 --> 00:25:20,450 Saya boleh menetapkan jenis pulangan untuk int, kembali 0 di sini, 464 00:25:20,450 --> 00:25:22,047 dan tidak melaksanakan bahagian dua kali ganda. 465 00:25:22,047 --> 00:25:23,880 Tetapi kita akan menjadi melakukan bahagian integer. 466 00:25:23,880 --> 00:25:27,080 Dan dengan itu kita maka tidak akan mendapat purata yang kita mungkin inginkan. 467 00:25:27,080 --> 00:25:29,210 Tetapi ya kita boleh mengubah suai jenis dengan cara itu. 468 00:25:29,210 --> 00:25:32,598 >> PENONTON: Dan kedua, anda mempunyai satu dua kali pada bahagian atas. 469 00:25:32,598 --> 00:25:35,502 Tetapi turun di bawah, apabila anda melakukan kembali Double, 470 00:25:35,502 --> 00:25:38,280 yang sudah secara automatik kembali format Double. 471 00:25:38,280 --> 00:25:42,278 Kenapa anda masih perlu untuk menentukan ia dengan anak panah di atas dengan Double? 472 00:25:42,278 --> 00:25:45,010 >> DAN AMRMENDARIZ: Jadi dalam kes ini, ini adalah sebahagian 473 00:25:45,010 --> 00:25:50,580 daripada the-- supaya mengulangi soalan itu, kerana ia tersirat daripada pulangan 474 00:25:50,580 --> 00:25:56,030 jenis di sini, apa jenis ini sebenarnya adalah, kita perlu jelas dengan Swift 475 00:25:56,030 --> 00:25:59,970 tentang apa yang kita mahu kembali daripada fungsi ini 476 00:25:59,970 --> 00:26:02,690 supaya apabila ia melaksanakan menaip memeriksa, ia boleh memastikan 477 00:26:02,690 --> 00:26:05,850 bahawa apa yang kita telah benar-benar ditulis turun di bawah sebenarnya sesuai dengan itu. 478 00:26:05,850 --> 00:26:10,225 Jadi ia adalah jenis seperti cek dengan diri sendiri jenis keadaan. 479 00:26:10,225 --> 00:26:11,050 Tetapi ada ialah- 480 00:26:11,050 --> 00:26:12,560 >> PENONTON: [didengar] arrow? 481 00:26:12,560 --> 00:26:19,490 >> DAN AMRMENDARIZ: Terdapat kes di kita boleh menentukan bahawa kita boleh secara tersirat 482 00:26:19,490 --> 00:26:21,550 menetapkan jenis penyata itu. 483 00:26:21,550 --> 00:26:23,940 Tetapi dalam kes ini, saya tidak rasa yang akan bekerja. 484 00:26:23,940 --> 00:26:26,190 Ada beberapa sintaks lain bahawa kita akan lihat nanti. 485 00:26:26,190 --> 00:26:30,320 486 00:26:30,320 --> 00:26:35,280 >> Baiklah, jadi sumber ini kod adalah sedikit berbeza 487 00:26:35,280 --> 00:26:41,839 kerana ini mem-parsing hujah daripada fungsi yang kita memanggil. 488 00:26:41,839 --> 00:26:44,130 Biar saya tunjukkan kepada anda bagaimana ia berfungsi sebelum kita benar-benar bergerak 489 00:26:44,130 --> 00:26:48,050 kepada beberapa perkara yang menarik yang yang berlaku di Swift. 490 00:26:48,050 --> 00:26:51,870 >> Jadi dalam kes ini, jika saya hanya menjalankan ini kod, notis bahawa apa yang ia lakukan 491 00:26:51,870 --> 00:26:54,900 manakala is--, ia jenis memberikan saya ralat pelik. 492 00:26:54,900 --> 00:26:59,730 Saya perlu lulus beberapa bilangan bulat sebagai hujah baris arahan. 493 00:26:59,730 --> 00:27:06,220 Jadi mari kita lihat, 150 dan 80, dan tekan Enter untuk mengetahui apa yang sebenarnya melakukan. 494 00:27:06,220 --> 00:27:09,890 Ia menerima setiap nilai-nilai ini sebagai integer. 495 00:27:09,890 --> 00:27:12,040 Ia memasukkan mereka ke dalam gradebook a. 496 00:27:12,040 --> 00:27:14,470 Dan kemudian ia melaksanakan bahawa pengiraan purata 497 00:27:14,470 --> 00:27:16,650 dan keluarkan yang seperti yang kita jangkakan. 498 00:27:16,650 --> 00:27:19,950 >> Tetapi jelas ada sesuatu yang berlaku pada dengan ini menolak sesuatu 499 00:27:19,950 --> 00:27:23,300 sesuatu yang integer. 500 00:27:23,300 --> 00:27:27,300 Seperti yang anda mungkin ingat dari apabila kita berurusan dengan hujah baris arahan 501 00:27:27,300 --> 00:27:32,640 dalam C dan bahasa lain, yang pertama 0-ke item dalam hujah baris arahan 502 00:27:32,640 --> 00:27:35,774 senarai adalah nama arahan bahawa kita benar-benar dilaksanakan. 503 00:27:35,774 --> 00:27:38,690 Jadi dalam kes ini, saya hanya menggelung atas segala hujah-hujah baris arahan. 504 00:27:38,690 --> 00:27:41,650 Tetapi saya tidak melakukan apa-apa jenis mewah semak untuk melangkau lebih yang pertama. 505 00:27:41,650 --> 00:27:45,920 Saya hanya secara jelas atau tersirat Saya memeriksa mana-mana jenis-jenis ini 506 00:27:45,920 --> 00:27:49,900 adalah integer sebelum saya sebenarnya melaksanakan pengiraan ini. 507 00:27:49,900 --> 00:27:52,420 >> Dan itu pada dasarnya apa yang berlaku di sini. 508 00:27:52,420 --> 00:27:55,860 Untuk setiap hujah yang hujah-hujah proses ini, 509 00:27:55,860 --> 00:27:59,210 Saya akan melaksanakan beberapa cek. 510 00:27:59,210 --> 00:28:01,970 Dan dalam kes ini, saya akan cuba untuk convert pertama 511 00:28:01,970 --> 00:28:07,620 hujah itu ke dalam integer dengan persembahan yang typecast jelas, 512 00:28:07,620 --> 00:28:12,310 kerana ia adalah, pada input, rentetan dan tidak sebenarnya integer. 513 00:28:12,310 --> 00:28:18,140 >> Tetapi ini adalah jenis sintaks pelik, jika gred biarlah sama Int (dalil). 514 00:28:18,140 --> 00:28:21,120 Apa yang sebenarnya berlaku di sini adalah amat 515 00:28:21,120 --> 00:28:24,390 penting untuk anda menggunakan Swift. 516 00:28:24,390 --> 00:28:27,610 Ini menggunakan apa yang dipanggil jenis pilihan. 517 00:28:27,610 --> 00:28:34,790 >> Jadi fungsi ini, Int (dalil), mengembalikan bukan hanya satu integer, tetapi pulangan 518 00:28:34,790 --> 00:28:37,470 apa yang dipanggil integer pilihan. 519 00:28:37,470 --> 00:28:41,200 Dan sebagainya ini adalah jenis jenis di atas jenis. 520 00:28:41,200 --> 00:28:45,900 Anda boleh semacam bayangkan seperti ia kembali seperti pakej. 521 00:28:45,900 --> 00:28:47,750 Dan apabila anda membuka yang pakej, sama ada 522 00:28:47,750 --> 00:28:53,930 mempunyai integer, yang merupakan hasil, atau ia mempunyai apa-apa di dalamnya sama sekali. 523 00:28:53,930 --> 00:28:58,140 Dan ini adalah berguna sebagai semakan ralat mekanisme, kerana dalam kes ini 524 00:28:58,140 --> 00:29:02,080 kita dapat mengetahui, adalah ini jenis penukaran berjaya? 525 00:29:02,080 --> 00:29:05,810 Jika ia, maka ia adalah sebenarnya akan mempunyai integer dalam. 526 00:29:05,810 --> 00:29:08,750 Jika tidak ia akan mempunyai beberapa nilai yang kita akan memanggil sifar, yang 527 00:29:08,750 --> 00:29:10,920 adalah wakil tidak integer sama sekali. 528 00:29:10,920 --> 00:29:13,270 Ia benar-benar mewakili apa-apa. 529 00:29:13,270 --> 00:29:18,130 >> Dan hal ini jika pembinaan membolehkan kita announced pakej itu, 530 00:29:18,130 --> 00:29:19,850 yang mengikat pilihan. 531 00:29:19,850 --> 00:29:25,560 Dan jika kita mampu announced yang pakej dan mencari integer di dalam, 532 00:29:25,560 --> 00:29:27,720 maka apa yang kita katakan di sini ialah kita akan kemudian 533 00:29:27,720 --> 00:29:33,090 membolehkan nilai yang akan ditetapkan ke dalam malar ini dipanggil gred. 534 00:29:33,090 --> 00:29:36,590 Dan bahagian ini jika kenyataan itu, bahagian atas jika kenyataan itu 535 00:29:36,590 --> 00:29:40,390 akan berjalan, kerana itu Bukalah kain-kain itu berjaya. 536 00:29:40,390 --> 00:29:43,290 >> Jika ia hanya kebetulan bahawa terdapat ralat mungkin 537 00:29:43,290 --> 00:29:47,040 dalam ini jenis penukaran yang jelas dari rentetan kepada integer, mungkin 538 00:29:47,040 --> 00:29:49,160 ia ABC nilai sebagai contoh. 539 00:29:49,160 --> 00:29:52,120 Dan itu sebenarnya tidak akan untuk menukar kepada integer. 540 00:29:52,120 --> 00:29:55,520 Maka ia akan kembali tiada, yang bukan integer. 541 00:29:55,520 --> 00:29:57,570 Dan ini jika kenyataan baik maka gagal. 542 00:29:57,570 --> 00:30:01,930 gred tidak akan wujud kerana ia tidak mempunyai kandungan integer. 543 00:30:01,930 --> 00:30:06,391 Dan ia akan berjalan blok lagi yang ini pula. 544 00:30:06,391 --> 00:30:06,890 Ya? 545 00:30:06,890 --> 00:30:09,652 >> PENONTON: Nil ialah N-I-L? 546 00:30:09,652 --> 00:30:11,110 DAN AMRMENDARIZ: nil ialah N-I-L, ya. 547 00:30:11,110 --> 00:30:14,970 548 00:30:14,970 --> 00:30:20,310 >> Jadi ini adalah mungkin salah satu daripada perkara yang paling sukar tentang Swift, 549 00:30:20,310 --> 00:30:23,690 terutamanya apabila anda berada dalam lalang pada aplikasi iOS 550 00:30:23,690 --> 00:30:27,442 dan anda sebenarnya cuba untuk melakukan beberapa pembangunan di sana. 551 00:30:27,442 --> 00:30:29,400 Ia akan dapat menjerit pada anda tentang pilihan. 552 00:30:29,400 --> 00:30:33,050 Ia akan meminta anda untuk tanda tanya dan tanda seru. 553 00:30:33,050 --> 00:30:37,100 Tetapi apabila anda memikirkan out-- jika anda meluangkan masa untuk memikirkan 554 00:30:37,100 --> 00:30:41,990 apa yang sedang berlaku dengan jenis pilihan, anda akan menjimatkan banyak sakit kepala 555 00:30:41,990 --> 00:30:46,040 seperti yang anda cuba untuk menulis aplikasi dalam Swift. 556 00:30:46,040 --> 00:30:47,660 >> Ia sebenarnya satu ciri yang sangat kuat. 557 00:30:47,660 --> 00:30:49,826 Dan anda hanya perlu mengambil kata-kata saya untuk itu buat masa sekarang. 558 00:30:49,826 --> 00:30:52,620 Tetapi kita akan melihat pembinaan ini dan beberapa orang lain suka 559 00:30:52,620 --> 00:30:56,740 dalam beberapa kod sumber lain yang kami akan menunjukkan kepada anda dalam hanya sedikit. 560 00:30:56,740 --> 00:31:00,440 >> Adakah terdapat sebarang pertanyaan awal di sini? 561 00:31:00,440 --> 00:31:03,790 562 00:31:03,790 --> 00:31:08,690 Jadi bawa pulang yang penting adalah bahawa jenis pilihan adalah jenis metatype a. 563 00:31:08,690 --> 00:31:12,500 Ia sama ada mempunyai nilai, dan jika ia berlaku, maka ia 564 00:31:12,500 --> 00:31:18,110 mungkin akan mempunyai nilai yang berkaitan dengan itu, atau ia tidak mempunyai nilai apa-apa, 565 00:31:18,110 --> 00:31:19,620 dan ia diwakili oleh tiada. 566 00:31:19,620 --> 00:31:24,210 567 00:31:24,210 --> 00:31:28,870 Selebihnya ini mungkin seperti yang anda inginkan. 568 00:31:28,870 --> 00:31:32,900 >> Jadi mari kita jalan sehingga yang kesukaran sekali lagi. 569 00:31:32,900 --> 00:31:37,070 Dan kali ini, mari kita lihat beberapa jenis data yang lain yang benar-benar wujud. 570 00:31:37,070 --> 00:31:41,290 Salah seorang daripada mereka adalah kamus, yang hampir sama dengan Python kamus. 571 00:31:41,290 --> 00:31:48,270 Ia adalah agak serupa dengan jadual hash dalam C. Ia pada asasnya adalah pemetaan kunci 572 00:31:48,270 --> 00:31:49,820 di mana kunci boleh menjadi tali. 573 00:31:49,820 --> 00:31:52,670 Dan apabila kamu melihat orang-orang sehingga kunci, mereka kunci akan mempunyai nilai. 574 00:31:52,670 --> 00:31:56,020 Jadi ia tidak cukup pelbagai, tetapi sebaliknya, lebih rapat 575 00:31:56,020 --> 00:31:58,810 kepada peta hash atau jadual hash. 576 00:31:58,810 --> 00:32:02,420 >> Mari kita lihat bagaimana ini sepatutnya bekerja sebelum kita benar-benar 577 00:32:02,420 --> 00:32:05,210 pergi ke dalam kod sumber itu sendiri. 578 00:32:05,210 --> 00:32:07,680 Jika saya hanya menjalankan ini, apa-apa yang benar-benar berlaku. 579 00:32:07,680 --> 00:32:12,430 Ia memberitahu saya bahawa saya menjangkakan beberapa parameter jenis berikut. 580 00:32:12,430 --> 00:32:16,050 Jadi, saya akan kemukakan kepada ia beberapa nama set masalah, 581 00:32:16,050 --> 00:32:18,490 supaya pset0, mungkin saya mendapat 100. 582 00:32:18,490 --> 00:32:20,790 Dan pset1, saya mendapat 5. 583 00:32:20,790 --> 00:32:24,630 Dan kemudian pada peperiksaan, saya dengan amat baik dan mendapat 30. 584 00:32:24,630 --> 00:32:27,180 Dan oops, saya tekan ruang di sini. 585 00:32:27,180 --> 00:32:30,940 >> Apabila saya tekan Enter, anda boleh melihat ia melakukan beberapa pengiraan. 586 00:32:30,940 --> 00:32:33,740 Ia mengatakan gradebook adalah tiga gred, pset1, pset0, peperiksaan. 587 00:32:33,740 --> 00:32:36,120 Dan gradebook mempunyai purata khusus ini. 588 00:32:36,120 --> 00:32:38,370 Jadi sekali lagi, kami sedang berusaha dengan idea gradebook ini, 589 00:32:38,370 --> 00:32:44,650 tetapi kita akan terus iterating dengan kerumitan fungsi kami. 590 00:32:44,650 --> 00:32:47,650 >> Jadi pada permulaan, kami hanya akan mewujudkan fungsi yang 591 00:32:47,650 --> 00:32:49,390 bertanggungjawab untuk mencetak penggunaan. 592 00:32:49,390 --> 00:32:51,920 Dan ada keluar ini fungsi yang akan hanya 593 00:32:51,920 --> 00:32:53,710 secara paksa berhenti permohonan. 594 00:32:53,710 --> 00:32:56,530 Ini bukanlah sesuatu yang akan anda gunakan dalam aplikasi iOS. 595 00:32:56,530 --> 00:32:59,750 Ini sahaja, dalam kes ini, dengan hujah baris arahan. 596 00:32:59,750 --> 00:33:01,990 Seterusnya kita akan mula bergerak ke arah Xcode. 597 00:33:01,990 --> 00:33:07,760 Tetapi ini adalah khusus untuk perintah garis program di rumah Swift. 598 00:33:07,760 --> 00:33:11,490 >> Mari kita lihat di beberapa perkara-perkara yang menarik di sini. 599 00:33:11,490 --> 00:33:15,150 Mari kita lihat, hanya beberapa perkara yang menarik lagi mungkin 600 00:33:15,150 --> 00:33:19,930 adalah bahawa dalam fungsi saya mencetak jumlah gred, 601 00:33:19,930 --> 00:33:26,090 anda mungkin ingat bahawa saya mempunyai senarai itu daripada pset1 items--, pset0, dan peperiksaan. 602 00:33:26,090 --> 00:33:29,130 Anda boleh benar-benar cepat dan mudah melakukan ini 603 00:33:29,130 --> 00:33:34,490 dengan mengambil gradebook, yang merupakan kamus yang mempunyai kunci dan nilai-nilai. 604 00:33:34,490 --> 00:33:38,730 Semua yang penting adalah melalui kaedah kunci dot sini, 605 00:33:38,730 --> 00:33:43,180 dan kemudian menggunakan joinWithSeparator ini, yang kemudiannya akan mengambil semua kunci 606 00:33:43,180 --> 00:33:48,590 bahawa kita telah ditaip, pset1-- atau maaf, pset0, pset1 dan exam-- 607 00:33:48,590 --> 00:33:53,030 dan menyatukan mereka bersama-sama menggunakan koma dan ruang 608 00:33:53,030 --> 00:33:55,400 untuk mewujudkan satu rentetan panjang. 609 00:33:55,400 --> 00:34:00,190 Ini operasi menyertai hanya phenomenally berguna dalam pelbagai konteks. 610 00:34:00,190 --> 00:34:03,450 Dan oleh itu adalah joinWithSeparator ini. 611 00:34:03,450 --> 00:34:06,939 >> Dan ini adalah satu perkara yang berubah daripada Swift 1 hingga Swift 2. 612 00:34:06,939 --> 00:34:08,730 Dulu ada yang Python style-- jika anda 613 00:34:08,730 --> 00:34:13,219 biasa dengan Python-- Python yang gaya menyertai kaedah pada tali. 614 00:34:13,219 --> 00:34:15,699 Tetapi itu tidak lagi kes di Swift 2. 615 00:34:15,699 --> 00:34:19,400 Anda mahu menggunakan ini jika anda mahu untuk merangkaikan pelbagai barangan 616 00:34:19,400 --> 00:34:23,380 bersama-sama dengan tali. 617 00:34:23,380 --> 00:34:27,889 >> Jadi mungkin maka dalam kita perbincangan purata sebelum ini, 618 00:34:27,889 --> 00:34:32,659 ia masuk akal sedikit lebih bagi kita untuk menetapkan fungsi purata 619 00:34:32,659 --> 00:34:36,610 menjadi dua pilihan dan bukan daripada sekadar dua jelas. 620 00:34:36,610 --> 00:34:39,239 Kerana kami bahawa keadaan luar biasa di mana, 621 00:34:39,239 --> 00:34:41,550 bagaimana jika gradebook sebenarnya tidak mempunyai nilai di dalamnya? 622 00:34:41,550 --> 00:34:44,280 Apakah yang perlu purata pulangan? 623 00:34:44,280 --> 00:34:46,350 >> Well mungkin dalam C anda akan melakukan sesuatu 624 00:34:46,350 --> 00:34:50,040 seperti menyediakan nilai sentinel, seperti 0,0, atau mungkin nombor negatif, 625 00:34:50,040 --> 00:34:53,690 atau sesuatu yang hanya mewakili fakta bahawa terdapat beberapa keadaan ralat 626 00:34:53,690 --> 00:34:57,910 dan anda mungkin tidak benar-benar mempunyai keupayaan untuk mengira purata tersebut. 627 00:34:57,910 --> 00:35:05,590 Well keindahan menyatakan yang jenis pilihan adalah untuk berbuat demikian. 628 00:35:05,590 --> 00:35:09,540 Dan sekarang saya katakan perkataan ini tetapi ini sebenarnya tidak menggunakan optionals. 629 00:35:09,540 --> 00:35:12,970 Tetapi kita akan melihat bahawa hanya dalam minit di mana kita boleh menetapkan purata 630 00:35:12,970 --> 00:35:17,230 sebagai suatu jenis data pilihan supaya jika ia benar-benar kembali beberapa data, kemudian 631 00:35:17,230 --> 00:35:18,470 kita akan kembali data tersebut. 632 00:35:18,470 --> 00:35:20,570 Jika tidak, kita akan kembali nil, mengatakan bahawa ini 633 00:35:20,570 --> 00:35:22,200 tiada pengiraan bermakna. 634 00:35:22,200 --> 00:35:25,650 635 00:35:25,650 --> 00:35:28,570 >> Mari kita beralih kepada sesuatu yang lain. 636 00:35:28,570 --> 00:35:35,910 Jadi dari sini, kita telah melihat semua contoh-contoh ini dalam baris arahan. 637 00:35:35,910 --> 00:35:39,470 Tetapi benar-benar apa yang anda akan untuk berurusan dengan adalah Xcode. 638 00:35:39,470 --> 00:35:43,720 Dan salah satu perkara yang baik mengenai Xcode, dan khususnya dalam Swift, 639 00:35:43,720 --> 00:35:47,450 adalah bahawa kita mempunyai ini Perkara yang dipanggil Taman Permainan. 640 00:35:47,450 --> 00:35:51,470 Dan padang permainan adalah tidak sama sekali sebuah aplikasi iOS. 641 00:35:51,470 --> 00:35:54,751 Tetapi ia membolehkan anda untuk bereksperimen dengan Swift dengan cara yang sangat mudah. 642 00:35:54,751 --> 00:35:56,000 Anda boleh menaip semua kod anda. 643 00:35:56,000 --> 00:35:58,140 Ia baik sintaks yang dinyatakan di sini. 644 00:35:58,140 --> 00:36:01,600 Apabila anda mencipta fail baru, ia akan meminta anda jika anda ingin membuat taman permainan. 645 00:36:01,600 --> 00:36:08,720 Tetapi perkara yang baik mengenai Taman Permainan adalah bahawa di sebelah kanan tetingkap anda, 646 00:36:08,720 --> 00:36:12,020 adakah ia benar-benar menunjukkan kepada anda output daripada kod anda. 647 00:36:12,020 --> 00:36:16,110 Jadi, jika saya tatal ke bawah, kita dapat melihat apa pengeluaran pelbagai baris kod 648 00:36:16,110 --> 00:36:17,200 yang sebenarnya berlaku untuk menjadi. 649 00:36:17,200 --> 00:36:19,850 650 00:36:19,850 --> 00:36:26,790 >> Jadi dalam kes ini, kita akan menukar arah hanya sedikit 651 00:36:26,790 --> 00:36:30,960 dan bercakap tentang sesuatu yang benar-benar penting kepada cara peringkat tinggi ini 652 00:36:30,960 --> 00:36:34,020 yang Swift beroperasi, dan ia idea ini penutupan. 653 00:36:34,020 --> 00:36:36,960 Dan anda mungkin telah melihat ini sedikit dalam JavaScript. 654 00:36:36,960 --> 00:36:40,770 Bagi anda yang berada dalam CS50, penutupan 655 00:36:40,770 --> 00:36:47,240 adalah sangat popular, cara yang sangat baik untuk melakukan perkara-perkara yang tinggi dalam bahasa-bahasa moden. 656 00:36:47,240 --> 00:36:50,270 Tetapi ia juga agak susah untuk balut kepala anda sekitar kali pertama. 657 00:36:50,270 --> 00:36:52,269 Jadi, jika anda melihat ini kali pertama, itu OK. 658 00:36:52,269 --> 00:36:56,740 Lihat sahaja kod sumber dan melihat jika anda boleh mencari penyelesaiannya di rumah. 659 00:36:56,740 --> 00:37:01,050 >> Jadi dalam kes ini, mari kita mengatakan bahawa kita ingin membuat banyak atlet 660 00:37:01,050 --> 00:37:04,134 dengan beberapa nilai tetap. 661 00:37:04,134 --> 00:37:05,800 Jadi dalam kes ini saya boleh membuat fungsi. 662 00:37:05,800 --> 00:37:09,270 Saya akan memanggilnya kuasa 2 tujuan yang tunggal dalam kehidupan 663 00:37:09,270 --> 00:37:15,770 adalah untuk mengambil beberapa input dan dua ia boleh pulang nilai itu. 664 00:37:15,770 --> 00:37:21,210 Perhatikan bahawa di sini saya menerima satu jenis data. 665 00:37:21,210 --> 00:37:23,137 Ia akan menjadi pembolehubah yang dipanggil x. 666 00:37:23,137 --> 00:37:23,970 Ia adalah dari jenis Double. 667 00:37:23,970 --> 00:37:26,190 Dan saya akan mengembalikan Double sini. 668 00:37:26,190 --> 00:37:29,100 Dan saya hanya akan melakukan yang sangat, terus-terang, cantik 669 00:37:29,100 --> 00:37:32,650 cara naif untuk menggandakan nilai ini. 670 00:37:32,650 --> 00:37:35,600 Dan saya akan menunjukkan kepada anda mengapa ini berguna dalam hanya satu saat. 671 00:37:35,600 --> 00:37:40,418 >> Perhatikan bahawa di sini kita mempunyai julat ini lagi. sesuatu dalam 1, dot 672 00:37:40,418 --> 00:37:44,130 dot dot, 2, yang bermaksud bahawa gelung ini akan berjalan dua kali. 673 00:37:44,130 --> 00:37:46,480 Tetapi ini merupakan satu pemboleh ubah dummy. 674 00:37:46,480 --> 00:37:49,650 Ini bermakna saya tidak benar-benar akan menggunakan pembolehubah yang mana-mana sahaja 675 00:37:49,650 --> 00:37:51,070 dalam gelung ini. 676 00:37:51,070 --> 00:37:55,380 Saya hanya mahu baris ini kod untuk menjalankan dua kali, 677 00:37:55,380 --> 00:37:58,980 tanpa perlu tahu nilai julat itu. 678 00:37:58,980 --> 00:38:02,570 >> Jadi dalam kes ini saya berjalan hasil kali x dua kali, yang pada dasarnya 679 00:38:02,570 --> 00:38:06,560 bermakna bahawa saya menyegiempatkan nilai ini. 680 00:38:06,560 --> 00:38:10,230 Dan ini berlaku kepada bekerja seperti yang kita jangkakan. 681 00:38:10,230 --> 00:38:16,410 Kuasa 2, lulus nilai 2.0 memberikan kita output 4. 682 00:38:16,410 --> 00:38:18,810 3.2 kerja-kerja untuk 10.24. 683 00:38:18,810 --> 00:38:22,660 >> Sekarang kita boleh melakukan yang sama perkara yang kuasa 3. 684 00:38:22,660 --> 00:38:25,330 Tetapi kini berubah hanya julat. 685 00:38:25,330 --> 00:38:28,840 Bagi pemboleh ubah dummy dalam 1 melalui 3, darab 3 kali, 686 00:38:28,840 --> 00:38:29,830 dan melakukan perkara yang sama. 687 00:38:29,830 --> 00:38:32,240 >> Jadi ini mungkin merasa sedikit dibuat-buat. 688 00:38:32,240 --> 00:38:34,270 Tetapi ada yang penting perkara di sini yang 689 00:38:34,270 --> 00:38:37,770 adalah bahawa melihat ini dua fungsi, ada 690 00:38:37,770 --> 00:38:43,600 hanya satu perkara yang berbeza, yang merupakan nilai ini dalam julat. 691 00:38:43,600 --> 00:38:46,910 Semua yang lain mengenai dua fungsi, kuasa 3 dan kuasa 2, 692 00:38:46,910 --> 00:38:50,440 adalah, sebenarnya, sama kerana mereka bekerja dengan cara yang sama. 693 00:38:50,440 --> 00:38:53,460 >> Jadi pada ketika ini, sedikit loceng penggera harus terkeluar. 694 00:38:53,460 --> 00:38:56,200 Mudah-mudahan apa yang anda katakan, anda tahu, ini merasa sedikit 695 00:38:56,200 --> 00:38:59,250 seperti pertindihan usaha. 696 00:38:59,250 --> 00:39:02,950 Mungkin ada cara yang bahawa saya akan dapat merangkumi semua ini 697 00:39:02,950 --> 00:39:06,630 dan menyediakan fungsi atau membuat fungsi yang 698 00:39:06,630 --> 00:39:11,550 tidak betul-betul apa yang saya mahu tanpa yang perlu taipkan ia keluar dengan jelas. 699 00:39:11,550 --> 00:39:15,732 Dan ini adalah apa kuasa penutupan yang membolehkan kita lakukan. 700 00:39:15,732 --> 00:39:16,940 Jadi mari kita lihat ini. 701 00:39:16,940 --> 00:39:18,700 Dan saya akan menghabiskan pasangan minit ini, kerana ini 702 00:39:18,700 --> 00:39:20,310 adalah cukup penting bagi Swift. 703 00:39:20,310 --> 00:39:22,900 Kami melihat ini sepanjang masa. 704 00:39:22,900 --> 00:39:24,550 Kami akan menentukan fungsi. 705 00:39:24,550 --> 00:39:26,380 Ia akan dipanggil powerOf. 706 00:39:26,380 --> 00:39:29,470 Ia akan menerima parameter dipanggil y jenis Int. 707 00:39:29,470 --> 00:39:32,220 Tetapi kita lihat pada jenis pulangan. 708 00:39:32,220 --> 00:39:38,730 Jenis pulangan adalah, dalam kurungan, Double arrow Double. 709 00:39:38,730 --> 00:39:43,370 Yang bermaksud bahawa fungsi ini, fungsi ini powerOf, 710 00:39:43,370 --> 00:39:46,550 pulang fungsi. 711 00:39:46,550 --> 00:39:50,845 Yang menerima Double dan mengembalikan Double. 712 00:39:50,845 --> 00:39:53,720 Jadi yang mungkin bunyi jenis gila, tetapi mari kita tatal ke bawah sedikit 713 00:39:53,720 --> 00:39:55,060 dan melihat untuk melihat apa yang berlaku. 714 00:39:55,060 --> 00:39:57,910 Kami dalam fungsi powerOf ini. 715 00:39:57,910 --> 00:40:00,760 Kami mewujudkan fungsi baru dipanggil exponentiator, 716 00:40:00,760 --> 00:40:02,900 tetapi ia tidak kira apa yang ada. 717 00:40:02,900 --> 00:40:06,410 >> Perhatikan bahawa ini mempunyai nilai input x. 718 00:40:06,410 --> 00:40:09,910 Dan ia mengambil dalam Double dan mengembalikan Double. 719 00:40:09,910 --> 00:40:16,320 Dan ini adalah kod yang sama bahawa kita lihat di atas, kecuali bahawa nilai 2 720 00:40:16,320 --> 00:40:20,060 atau nilai 3, yang atas terikat dalam julat itu, 721 00:40:20,060 --> 00:40:23,210 telah digantikan dengan nilai ini y, yang 722 00:40:23,210 --> 00:40:27,230 merupakan parameter awal fungsi powerOf kami. 723 00:40:27,230 --> 00:40:31,700 Dan pada ketika ini, kita kembali exponentiator. 724 00:40:31,700 --> 00:40:33,345 Kami kembali fungsi. 725 00:40:33,345 --> 00:40:36,300 726 00:40:36,300 --> 00:40:39,550 >> Ia adalah jenis seperti fikiran bertiup sedikit. 727 00:40:39,550 --> 00:40:44,360 Tetapi mari kita bayangkan apa yang berlaku apabila saya memanggil fungsi ini powerOf 728 00:40:44,360 --> 00:40:47,610 dan masuk ke dalam ia beberapa nilai seperti 2. 729 00:40:47,610 --> 00:40:50,020 Adakah ini bermakna bahawa Saya kini mempunyai nilai 730 00:40:50,020 --> 00:40:55,130 2 y, yang bermaksud bahawa nilai ini y dalam fungsi exponentiator ini 731 00:40:55,130 --> 00:40:56,410 akan menjadi nilai yang 2. 732 00:40:56,410 --> 00:41:01,290 Tetapi saya kembali ini fungsi exponentiator. 733 00:41:01,290 --> 00:41:05,900 >> Jadi notis apa Swift kata saya telah mencipta dalam kes ini. 734 00:41:05,900 --> 00:41:10,550 biarkan persegi definisi, ia adalah fungsi yang berguru kepada seorang Double 735 00:41:10,550 --> 00:41:12,610 dan mengembalikan Double. 736 00:41:12,610 --> 00:41:16,590 Saya telah mencipta satu majlis bahawa kuasa dua sesuatu 737 00:41:16,590 --> 00:41:19,782 menggunakan mekanisme ini di sini. 738 00:41:19,782 --> 00:41:22,490 Dan benar-benar apa yang berlaku adalah bahawa ia kembali fungsi ini 739 00:41:22,490 --> 00:41:26,390 exponentiator, tetapi nilai ini y dibalut di dalamnya. 740 00:41:26,390 --> 00:41:31,080 Dan sehingga kini setiap kali saya menggunakan ini ubah atau malar ini dipanggil 741 00:41:31,080 --> 00:41:35,180 persegi, ia ia akan berkelakuan sebagai fungsi. 742 00:41:35,180 --> 00:41:39,960 Oleh itu, saya kemudian boleh memanggil pembolehubah yang seperti yang saya akan memanggil fungsi, 743 00:41:39,960 --> 00:41:43,830 dan masuk ke dalam ia nombor, seperti dalam kes ini 3. 744 00:41:43,830 --> 00:41:45,910 Dan saya akan mengambil ancang-nilai ini. 745 00:41:45,910 --> 00:41:53,340 Jadi 3 kuasa dua kemudiannya menjadi 9, seperti yang kita boleh lihat di sini. 746 00:41:53,340 --> 00:41:56,530 >> Benar-benar gila, tetapi ini sekarang membolehkan saya peluang 747 00:41:56,530 --> 00:41:59,040 untuk mewujudkan fungsi powerOf lain. 748 00:41:59,040 --> 00:42:03,680 Seperti yang boleh saya katakan, OK, baik sekarang saya mahu untuk mewujudkan satu fungsi baru, powerOf (3), 749 00:42:03,680 --> 00:42:06,290 dan menyimpan yang ke tetap dipanggil kuasa tiga. 750 00:42:06,290 --> 00:42:10,220 Dan sekarang kiub akan menjadi fungsi berasingan yang kemudiannya akan 751 00:42:10,220 --> 00:42:14,800 mengambil beberapa nilai sebagai input dan kiub yang nilai seperti yang kita lihat dalam garis bawah 752 00:42:14,800 --> 00:42:16,420 di sini. 753 00:42:16,420 --> 00:42:18,590 kiub 2 akan menyebabkan 8. 754 00:42:18,590 --> 00:42:21,330 755 00:42:21,330 --> 00:42:22,680 >> Barangan Mudah-mudahan cantik kemas. 756 00:42:22,680 --> 00:42:25,920 Anda tidak pernah dilihat sebelum ini. 757 00:42:25,920 --> 00:42:29,990 Saya menggalakkan anda untuk melihat ke dalam penutupan dan menyiasat ini sedikit lebih. 758 00:42:29,990 --> 00:42:33,570 Ia barangan benar-benar kuat kita lihat banyak dalam JavaScript dan beberapa bahasa lain. 759 00:42:33,570 --> 00:42:37,160 Ia benar-benar penting untuk memahami API dan juga 760 00:42:37,160 --> 00:42:38,620 bahawa kita akan mendapat dalam masa satu saat. 761 00:42:38,620 --> 00:42:39,456 Ya? 762 00:42:39,456 --> 00:42:43,740 >> PENONTON: Apabila anda melakukan powerOf (2), kurungan, dan kemudian 763 00:42:43,740 --> 00:42:48,764 kurungan lain, input-- lain anda pada dasarnya menggantikan dataran. 764 00:42:48,764 --> 00:42:50,930 DAN AMRMENDARIZ: Oleh itu, mencari di garisan yang terakhir di sini. 765 00:42:50,930 --> 00:42:55,930 Ia sebenarnya sama sekali mungkin untuk berbuat demikian chaining seperti yang anda cadangkan. 766 00:42:55,930 --> 00:43:00,990 Jadi powerOf (5) bermaksud bahawa kita akan untuk mempunyai exponentiator 5 di sini. 767 00:43:00,990 --> 00:43:04,160 Jadi ini pada dasarnya akan menjadi perkara yang sama seperti 4 kepada kuasa kelima, 768 00:43:04,160 --> 00:43:07,200 kerana kita telah membuat exponentiating yang berfungsi untuk kuasa yang kelima, 769 00:43:07,200 --> 00:43:09,920 dan kami lulus ke yang berfungsi nilai 4. 770 00:43:09,920 --> 00:43:12,619 Dan kita akan mendapat nilai yang yang kita jangkakan, 1024. 771 00:43:12,619 --> 00:43:14,785 PENONTON: Dan ia bukan satu nama, jadi ia membuatkan ia lebih mudah 772 00:43:14,785 --> 00:43:16,570 membaca, dataran apa sahaja. 773 00:43:16,570 --> 00:43:17,903 >> DAN AMRMENDARIZ: Betul, betul-betul. 774 00:43:17,903 --> 00:43:21,120 Jadi sebelum saya hanya meletakkan ia menjadi tetap di sini supaya 775 00:43:21,120 --> 00:43:23,808 bahawa ia membuat ia mudah untuk digunakan nama itu. 776 00:43:23,808 --> 00:43:24,308 Ya? 777 00:43:24,308 --> 00:43:26,942 >> PENONTON: Dalam konteks ini powerOf, ia adalah sebahagian 778 00:43:26,942 --> 00:43:30,774 bahasa pengaturcaraan yang bertentangan dengan cara anda 779 00:43:30,774 --> 00:43:33,952 memikirkan powerOf dalam [didengar]? 780 00:43:33,952 --> 00:43:35,660 DAN AMRMENDARIZ: Jadi dalam kes ini, powerOf 781 00:43:35,660 --> 00:43:39,280 adalah semata-mata atas nama fungsi yang saya ditakrifkan di sini. 782 00:43:39,280 --> 00:43:41,801 Jadi ia tidak wujud kepada bahasa itu sendiri, 783 00:43:41,801 --> 00:43:43,550 tetapi sebaliknya, ia hanya fungsi yang mempunyai 784 00:43:43,550 --> 00:43:45,628 nama itu kerana saya memberikan nama itu. 785 00:43:45,628 --> 00:43:48,770 786 00:43:48,770 --> 00:43:51,920 Apa-apa soalan lain? 787 00:43:51,920 --> 00:43:52,800 Baiklah. 788 00:43:52,800 --> 00:43:54,750 >> Sekarang ini adalah besar. 789 00:43:54,750 --> 00:43:58,170 Tetapi anda tidak akan melihat banyak fungsi penutupan yang 790 00:43:58,170 --> 00:44:03,440 seperti ini di mana anda menentukan, di dalam satu fungsi, fungsi yang lain. 791 00:44:03,440 --> 00:44:04,320 Dan anda boleh melakukannya. 792 00:44:04,320 --> 00:44:06,430 Tetapi ia adalah jenis tidak benar-benar perlu, bukan? 793 00:44:06,430 --> 00:44:09,189 Seperti mengapa saya menetapkan ini fungsi dipanggil exponentiator 794 00:44:09,189 --> 00:44:10,480 dan kemudian segera mengembalikannya. 795 00:44:10,480 --> 00:44:15,220 Mengapa saya tidak boleh hanya dengan segera kembali fungsi ini? 796 00:44:15,220 --> 00:44:18,890 >> Dan sebenarnya, inilah idea di sebalik konsep yang dipanggil 797 00:44:18,890 --> 00:44:22,410 fungsi tanpa nama, di mana fungsi tanpa nama tidak benar-benar 798 00:44:22,410 --> 00:44:25,270 mempunyai nama kerana mereka tidak perlu untuk mempunyai satu. 799 00:44:25,270 --> 00:44:28,700 Dan sebagainya dalam kes ini, di 7B, kita boleh mencari dengan tepat itu. 800 00:44:28,700 --> 00:44:31,470 Itu semua kod yang sama, melakukan perkara yang sama, 801 00:44:31,470 --> 00:44:35,570 tetapi kini kami telah berubah sedikit supaya bahawa fungsi powerOf ini dengan segera 802 00:44:35,570 --> 00:44:37,750 mengembalikan fungsi. 803 00:44:37,750 --> 00:44:44,150 Perhatikan bahawa selepas kembali, terdapat satu kurungan kerinting terbuka. 804 00:44:44,150 --> 00:44:46,410 Ia mengharapkan input ini Double. 805 00:44:46,410 --> 00:44:48,560 Ia menjangkakan bahawa output Double. 806 00:44:48,560 --> 00:44:52,175 Dan kemudian kata kunci memisahkan kod itu sendiri. 807 00:44:52,175 --> 00:44:53,550 Jadi ini adalah satu fungsi tanpa nama. 808 00:44:53,550 --> 00:44:57,030 Ia sebenarnya tidak mempunyai nama, sedangkan sebelum ia dipanggil exponentiator. 809 00:44:57,030 --> 00:45:00,229 Tetapi seperti yang kita lihat, hanya benar-benar tidak merujuk kepada exponentiator 810 00:45:00,229 --> 00:45:01,270 di luar fungsi tersebut. 811 00:45:01,270 --> 00:45:02,470 Oleh itu, ia tidak mengapa. 812 00:45:02,470 --> 00:45:06,300 Jadi fungsi tanpa nama ini adalah kononnya kerana ia adalah bernama, 813 00:45:06,300 --> 00:45:09,107 tetapi ia masih digunakan dalam konteks kod ini. 814 00:45:09,107 --> 00:45:13,690 815 00:45:13,690 --> 00:45:16,079 >> Pasangan yang akan datang saya akan terus diharapkan 816 00:45:16,079 --> 00:45:17,370 meniup fikiran anda sedikit. 817 00:45:17,370 --> 00:45:20,410 Kami boleh memudahkan ini lebih. 818 00:45:20,410 --> 00:45:24,490 Kerana seperti yang dengan bijak berkata sebelum ini, 819 00:45:24,490 --> 00:45:29,100 mungkin kita benar-benar tahu, dengan kesimpulan dari kod ini, apa yang 820 00:45:29,100 --> 00:45:31,750 output kod ini akan menjadi. 821 00:45:31,750 --> 00:45:38,180 Dan sebenarnya, dalam fungsi tanpa nama ini, kita sebenarnya boleh membuat kesimpulan jenis data. 822 00:45:38,180 --> 00:45:41,650 >> Jadi, dalam satu ini, kita tidak lagi perlu menentukan dengan jelas 823 00:45:41,650 --> 00:45:44,850 jenis data yang yang yang input dan output daripada fungsi ini 824 00:45:44,850 --> 00:45:45,890 untuk beberapa sebab. 825 00:45:45,890 --> 00:45:51,390 Satu adalah bahawa kami telah ditakrifkan, sehingga di prototaip fungsi disertakan itu, 826 00:45:51,390 --> 00:45:55,770 jenis data tanpa nama ini fungsi perlu input dan output. 827 00:45:55,770 --> 00:45:57,900 Dan dari yang lain, kita boleh membuat kesimpulan dari kod 828 00:45:57,900 --> 00:46:01,930 turun di sini bahawa kami menerima input iaitu dari jenis Double 829 00:46:01,930 --> 00:46:03,670 dan mengembalikan Double. 830 00:46:03,670 --> 00:46:07,890 >> Perhatikan bahawa di sini kita tidak mempunyai jelas ditakrifkan nama-nama hujah-hujah 831 00:46:07,890 --> 00:46:11,220 bahawa fungsi ini menerima. 832 00:46:11,220 --> 00:46:16,180 Dan dengan itu kita melihat kita boleh merujuk kepada mereka parameter menggunakan $ 0, $ 1, 833 00:46:16,180 --> 00:46:20,140 sebagainya dan sebagainya, bergantung kepada bilangan parameter yang digunakan 834 00:46:20,140 --> 00:46:20,850 dalam fungsi ini. 835 00:46:20,850 --> 00:46:23,370 836 00:46:23,370 --> 00:46:29,740 >> Ini adalah sesuatu yang anda akan untuk melihat banyak kurungan ini kerinting terbuka 837 00:46:29,740 --> 00:46:32,797 definisi diikuti dengan $ 0, dan kemudian beberapa operasi, 838 00:46:32,797 --> 00:46:34,130 dan kemudian kurungan kerinting tertutup. 839 00:46:34,130 --> 00:46:38,630 Itulah fungsi tanpa nama yang melaksanakan operasi ini. 840 00:46:38,630 --> 00:46:42,940 Ia mempunyai parameter ini di mana ia adalah jenis adalah disimpulkan. 841 00:46:42,940 --> 00:46:44,860 Yang Parameter pertama adalah $ 0. 842 00:46:44,860 --> 00:46:49,010 Dan beberapa operasi adalah berlaku pada yang $ 0. 843 00:46:49,010 --> 00:46:52,100 >> PENONTON: Jadi tanda dolar bermakna parameter pada dasarnya, 844 00:46:52,100 --> 00:46:53,429 dan 0 bermakna yang pertama? 845 00:46:53,429 --> 00:46:54,720 DAN Armendariz: Itu betul. 846 00:46:54,720 --> 00:46:59,100 Jadi tanda dolar pada asasnya bermakna parameter, dan 0 bermakna yang pertama. 847 00:46:59,100 --> 00:47:02,760 Tetapi ia berfungsi secara khusus dalam kes ini di mana saya telah tidak dinamakan 848 00:47:02,760 --> 00:47:07,940 hujah-hujah dalam fungsi tanpa nama saya. 849 00:47:07,940 --> 00:47:11,119 >> PENONTON: Adakah Perl atau sesuatu yang mempunyai tanda ini dolar, dolar 0 di sana? 850 00:47:11,119 --> 00:47:12,702 DAN Armendariz: Adakah yang, saya minta maaf? 851 00:47:12,702 --> 00:47:15,360 PENONTON: Adakah Perl mempunyai dolar ini 0, dolar 1-- 852 00:47:15,360 --> 00:47:17,318 DAN Armendariz: Saya tidak terlalu biasa dengan Perl, 853 00:47:17,318 --> 00:47:21,340 tetapi PHP apa yang mentakrifkan pembolehubah berdasarkan tanda-tanda dolar. 854 00:47:21,340 --> 00:47:26,120 Dan mungkin ada beberapa bahasa yang mempunyai ciri-ciri seperti ini. 855 00:47:26,120 --> 00:47:28,240 Malah, Swift meminjam banyak ciri-ciri seperti ini 856 00:47:28,240 --> 00:47:29,489 dari banyak bahasa lain. 857 00:47:29,489 --> 00:47:32,380 Kami melihat petunjuk Python di dalamnya. 858 00:47:32,380 --> 00:47:35,800 Definisi jenis seolah-olah datang dari OCaml. 859 00:47:35,800 --> 00:47:38,932 Dan kita mempunyai hanya sejumlah besar barangan dari banyak bahasa. 860 00:47:38,932 --> 00:47:40,640 Itulah salah satu yang bagus perkara tentang Swift 861 00:47:40,640 --> 00:47:43,390 adalah bahawa ia mengambil banyak terbaik idea daripada sekumpulan bahasa 862 00:47:43,390 --> 00:47:47,229 dan shoehorns mereka semua bersama-sama ke dalam satu bahasa super. 863 00:47:47,229 --> 00:47:49,520 Malah, jika anda membenarkan saya untuk terus meniup fikiran anda, 864 00:47:49,520 --> 00:47:51,000 jadi kami telah melakukan semua ini. 865 00:47:51,000 --> 00:47:56,690 Kami mungkin boleh memudahkan ini sedikit sedikit demi menyedari bahawa, sudah tentu, 866 00:47:56,690 --> 00:48:02,120 Swift mempunyai exponentiating yang fungsi terbina dalam. 867 00:48:02,120 --> 00:48:04,660 Jika saya mengimport Darwin, yang hanya perpustakaan yang 868 00:48:04,660 --> 00:48:09,680 mempunyai fungsi dipanggil ini pow, kini Saya boleh memudahkan tanganku fungsi 869 00:48:09,680 --> 00:48:11,830 sebagai berikut. 870 00:48:11,830 --> 00:48:15,860 Ia akan kembali fungsi tanpa nama ini. 871 00:48:15,860 --> 00:48:17,950 >> Tetapi melihat bagaimana mudah ini sekarang. 872 00:48:17,950 --> 00:48:22,780 Ini adalah satu fungsi tanpa nama yang adalah menerima beberapa jenis data, 873 00:48:22,780 --> 00:48:26,600 dan ia akan menjadi salah hujah secara khusus, 874 00:48:26,600 --> 00:48:29,320 dirujuk pada $ 0 yang adalah jenis Double. 875 00:48:29,320 --> 00:48:32,680 Ia akan kembali jenis Double. 876 00:48:32,680 --> 00:48:35,760 Tetapi kenyataan return kini tersirat. 877 00:48:35,760 --> 00:48:39,990 >> Dan ia adalah gaya yang tepat ini yang adalah sangat, sangat lazim dalam Swift, 878 00:48:39,990 --> 00:48:40,790 seluruh tempat. 879 00:48:40,790 --> 00:48:43,190 Kita akan melihat ini sepanjang masa dalam Swift. 880 00:48:43,190 --> 00:48:46,150 Jadi saya menunjukkan semua ini untuk anda kerana sintaks ini. 881 00:48:46,150 --> 00:48:49,070 Ini adalah perkara biasa untuk melihat, yang bermakna ia 882 00:48:49,070 --> 00:48:51,420 adalah fungsi tanpa nama yang melaksanakan 883 00:48:51,420 --> 00:48:54,640 beberapa kuasa pada hujah-hujah ini. 884 00:48:54,640 --> 00:48:56,940 Dan ada pulangan yang tersirat. 885 00:48:56,940 --> 00:49:01,850 Oleh itu, ia adalah benar-benar perkara yang sama bagi kami untuk mengatakan ini, di sini. 886 00:49:01,850 --> 00:49:05,730 887 00:49:05,730 --> 00:49:08,150 >> Kerana kerinting ini kurungan adalah fungsi, 888 00:49:08,150 --> 00:49:10,480 kami melakukan operasi ini kepada hujah pertama. 889 00:49:10,480 --> 00:49:12,170 Kita akan kembali itu. 890 00:49:12,170 --> 00:49:14,815 Tetapi pulangan luar ini adalah kembali bahawa fungsi keseluruhan, 891 00:49:14,815 --> 00:49:19,855 bahawa fungsi tanpa nama keseluruhan yang kita telah buat. 892 00:49:19,855 --> 00:49:21,689 Apa-apa soalan lain? 893 00:49:21,689 --> 00:49:23,980 Baiklah, saya tidak tahu sama ada anda semua bersedia untuk ini, 894 00:49:23,980 --> 00:49:27,455 tetapi kita boleh pergi lebih gila dengan Swift. 895 00:49:27,455 --> 00:49:28,560 Anda bersedia? 896 00:49:28,560 --> 00:49:29,930 OK, ini adalah besar. 897 00:49:29,930 --> 00:49:35,310 >> Sekarang kita benar-benar mempunyai keupayaan untuk, Swift, kerana bagaimana modular 898 00:49:35,310 --> 00:49:39,650 dan bagaimana protokol berasaskan ia adalah, untuk menentukan pengendali kami sendiri freaking. 899 00:49:39,650 --> 00:49:44,060 Seperti dalam kes ini, kita tidak mempunyai operator untuk exponentiation-- baik, 900 00:49:44,060 --> 00:49:47,990 untuk kuasa sesuatu persembahan. 901 00:49:47,990 --> 00:49:53,632 Tetapi saya boleh, dalam Swift, menentukan yang baru pengendali yang tidak tepat itu. 902 00:49:53,632 --> 00:49:55,590 Jadi dalam kes ini ada sekumpulan sintaks sini. 903 00:49:55,590 --> 00:49:59,980 Dan saya akan membolehkan anda untuk melihat ia di rumah apabila anda melihat ini. 904 00:49:59,980 --> 00:50:06,890 Tetapi kita menentukan infiks ini operator, **, yang akan kemudian membenarkan kami, 905 00:50:06,890 --> 00:50:09,840 dengan menentukan apa yang fungsi ** sebenarnya 906 00:50:09,840 --> 00:50:15,010 tidak, untuk menerima tangan kiri sisi dan sebelah kanan, 907 00:50:15,010 --> 00:50:21,190 dan kemudian kembali eksponen yang sebelah kiri ke sebelah kanan. 908 00:50:21,190 --> 00:50:24,850 >> Dan sekarang semua Saya tiba-tiba telah mencipta satu pengangka baru. 909 00:50:24,850 --> 00:50:29,490 Jadi 2 ** 3 bermakna 2 kuasa ketiga. 910 00:50:29,490 --> 00:50:34,420 [Mind Blowing BUNYI] ini oleh sendiri perlu membuat anda menjadi seperti, 911 00:50:34,420 --> 00:50:37,960 OK, skru C. saya akan Swift sepanjang jalan. 912 00:50:37,960 --> 00:50:38,740 Ini bagus. 913 00:50:38,740 --> 00:50:40,140 Ini adalah cukup hebat. 914 00:50:40,140 --> 00:50:42,240 >> Walaupun ini adalah satu contoh yang baik. 915 00:50:42,240 --> 00:50:45,570 Tetapi saya tidak pernah sekali di luar contoh ini sebenarnya 916 00:50:45,570 --> 00:50:46,800 ditakrifkan pengendali saya sendiri. 917 00:50:46,800 --> 00:50:49,710 Tetapi masih, ia menunjukkan banyak kuasa Swift 918 00:50:49,710 --> 00:50:54,050 dan mengapa ini sebenarnya benar-benar sangat sejuk. 919 00:50:54,050 --> 00:50:55,832 OK, ya? 920 00:50:55,832 --> 00:50:57,790 PENONTON: Jika anda menentukan operator anda sendiri, 921 00:50:57,790 --> 00:51:02,940 bagaimana anda tahu anda tidak sengaja cuba dan mewujudkan pengendali itu 922 00:51:02,940 --> 00:51:06,040 di suatu tempat di C, seperti tersembunyi di suatu tempat di Swift, 923 00:51:06,040 --> 00:51:12,210 seperti satu kabur yang mungkin tidak dilihat sebelum ini. 924 00:51:12,210 --> 00:51:15,050 >> DAN Armendariz: Jadi, jika anda cuba untuk menentukan operator anda sendiri, 925 00:51:15,050 --> 00:51:20,970 terdapat risiko mentakrifkan berbanding dengan pengendali yang sedia ada. 926 00:51:20,970 --> 00:51:24,870 Yang masuk ke tahap perincian yang Saya tidak fikir kita mempunyai masa untuk pergi ke atas. 927 00:51:24,870 --> 00:51:27,620 Tetapi itu adalah risiko. 928 00:51:27,620 --> 00:51:31,320 Dan itulah sebenarnya sebab utama Saya tidak menggunakan simbol karet, yang 929 00:51:31,320 --> 00:51:36,210 apabila kita menaip kuasa, kita biasanya menggunakan 4 sedikit karet 5 atau sesuatu 930 00:51:36,210 --> 00:51:40,560 seperti itu, hanya apabila kita berada Gchatting teman atau apa sahaja. 931 00:51:40,560 --> 00:51:43,660 Tetapi dalam kes itu, yang benar-benar akan menyebabkan perlanggaran. 932 00:51:43,660 --> 00:51:46,450 Oleh itu, saya dielakkan hanya kerana Saya kebetulan tahu dalam kes ini 933 00:51:46,450 --> 00:51:50,430 bahawa yang akan menyebabkan perlanggaran itu. 934 00:51:50,430 --> 00:51:52,270 >> Baiklah. 935 00:51:52,270 --> 00:51:55,080 Sekarang malangnya, untuk tujuh minit terakhir, 936 00:51:55,080 --> 00:51:57,410 Saya perlu terus bertiup minda anda sedikit. 937 00:51:57,410 --> 00:52:00,230 Jadi izinkan saya untuk menunjukkan kepada anda beberapa perkara lain juga. 938 00:52:00,230 --> 00:52:03,710 >> Kami telah menunjukkan anda idea ini mempunyai fungsi-fungsi ini tanpa nama, 939 00:52:03,710 --> 00:52:07,040 penutupan ini yang membolehkan anda untuk jenis lulus fungsi sekitar. 940 00:52:07,040 --> 00:52:08,100 Anda boleh kembali mereka. 941 00:52:08,100 --> 00:52:09,490 Anda boleh memanipulasi mereka. 942 00:52:09,490 --> 00:52:11,790 Anda boleh melakukan pelbagai barangan gila. 943 00:52:11,790 --> 00:52:14,850 >> Tetapi satu perkara lain yang berlaku untuk menjadi yang berguna 944 00:52:14,850 --> 00:52:19,740 adalah keupayaan untuk, yang bertentangan untuk kembali fungsi-fungsi 945 00:52:19,740 --> 00:52:25,146 dalam satu majlis, meluluskan fungsi sebagai parameter kepada fungsi yang lain. 946 00:52:25,146 --> 00:52:30,430 Anda mungkin berfikir baik mengapa di Bumi akan saya mahu melakukan sesuatu seperti itu? 947 00:52:30,430 --> 00:52:33,660 >> Nah, mari kita mengatakan bahawa saya mahu untuk mengambil pengendali ini yang saya 948 00:52:33,660 --> 00:52:40,260 bekerja keras untuk mencipta dan menggunakan kepada sekumpulan nombor yang berlainan 949 00:52:40,260 --> 00:52:41,770 dalam array. 950 00:52:41,770 --> 00:52:46,700 Jadi, dalam kes ini saya mempunyai pelbagai integers-- 1, 4, 7, 2, 5, 10, 56. 951 00:52:46,700 --> 00:52:48,080 Dan saya mahu menggandakan mereka semua. 952 00:52:48,080 --> 00:52:50,430 Cara yang kita akan biasanya melakukannya adalah untuk hanya menulis 953 00:52:50,430 --> 00:52:53,440 yang mudah untuk gelung yang iterates lebih semua daripada mereka 954 00:52:53,440 --> 00:52:57,140 dan melaksanakan beberapa jenis operasi persegi ke atas mereka, 955 00:52:57,140 --> 00:53:02,700 memasukkan nilai-nilai baru ke dalam yang baru berubah-ubah, atau lebih tepat, keselesaan dan kemudahan baru di sini. 956 00:53:02,700 --> 00:53:07,370 Dan nilai pengeluaran hasil maka semua orang-orang tatasusunan, 957 00:53:07,370 --> 00:53:10,200 atau sebaliknya semua orang-orang elemen sekarang kuasa dua. 958 00:53:10,200 --> 00:53:12,680 >> Dan kita boleh melakukan perkara yang sama perkara yang cubing itu, 959 00:53:12,680 --> 00:53:15,360 tetapi loceng penggera sedikit sepatutnya dapat terkeluar 960 00:53:15,360 --> 00:53:17,360 mengatakan bahawa mungkin ada beberapa cara yang kita akan 961 00:53:17,360 --> 00:53:19,860 dapat memudahkan ini sedikit. 962 00:53:19,860 --> 00:53:21,130 Dan sebenarnya ada. 963 00:53:21,130 --> 00:53:25,320 Bagaimana jika kita boleh mewujudkan fungsi yang membolehkan kita 964 00:53:25,320 --> 00:53:28,350 untuk menerima, sebagai pemangsa, fungsi? 965 00:53:28,350 --> 00:53:30,350 Jadi dalam kes ini, mengambil melihat hujah-hujah ini. 966 00:53:30,350 --> 00:53:33,220 Kami akan menerima senarai beregu. 967 00:53:33,220 --> 00:53:35,030 Dan kemudian kita akan untuk menerima fungsi 968 00:53:35,030 --> 00:53:40,990 dalam pembolehubah yang dipanggil f yang akan mengambil Double dan dapatkan Double. 969 00:53:40,990 --> 00:53:43,320 Dan seluruh output fungsi ini keseluruhan 970 00:53:43,320 --> 00:53:47,310 dipanggil mapper akan kembali pelbagai dipanggil dua kali. 971 00:53:47,310 --> 00:53:52,380 >> Apa ini maka akan membolehkan saya untuk lakukan adalah untuk melelar senarai itu 972 00:53:52,380 --> 00:53:56,350 dan melakukan perkara yang sama, tetapi sekarang memohon fungsi yang pada setiap 973 00:53:56,350 --> 00:53:58,970 daripada nilai-nilai individu dalam senarai itu. 974 00:53:58,970 --> 00:54:00,750 Jadi, saya tidak benar-benar tahu apa f. 975 00:54:00,750 --> 00:54:02,010 Tidak kira kepada saya. 976 00:54:02,010 --> 00:54:06,530 Tetapi selagi ia mengambil dalam Kelamin, melakukan beberapa operasi di atasnya, 977 00:54:06,530 --> 00:54:08,640 dan kemudian mengembalikan Double, saya kemudiannya akan menjadi 978 00:54:08,640 --> 00:54:13,415 dapat memetakan fungsi yang seluruh setiap elemen tunggal dalam senarai. 979 00:54:13,415 --> 00:54:16,270 980 00:54:16,270 --> 00:54:20,930 >> Dan ini jenis pengaturcaraan adalah dipanggil fungsi aras tinggi, 981 00:54:20,930 --> 00:54:24,440 di mana kita fungsi lulus sekitar sebagai parameter 982 00:54:24,440 --> 00:54:26,430 dan melakukan perkara-perkara dengan fungsi. 983 00:54:26,430 --> 00:54:29,640 Ia adalah jenis seperti mengambil semua ini idea-idea yang kita telah belajar dalam CS50 984 00:54:29,640 --> 00:54:31,390 dan mengambil mereka semacam of ke peringkat seterusnya. 985 00:54:31,390 --> 00:54:34,140 Dan ini adalah semua barangan gaya CS51. 986 00:54:34,140 --> 00:54:37,080 Dan dengan itu kita akan pergi secara mendalam lebih dalam kelas seperti itu. 987 00:54:37,080 --> 00:54:38,930 >> Tetapi ini juga penting di sini kerana kita 988 00:54:38,930 --> 00:54:42,010 melihat banyak fungsi yang digunakan dalam Swift 989 00:54:42,010 --> 00:54:45,590 yang pada dasarnya tidak ini, di mana kita mempunyai 990 00:54:45,590 --> 00:54:48,300 beberapa nombor, ada pelbagai nombor. 991 00:54:48,300 --> 00:54:50,850 Kami akan terjadilah bahawa array ke dalam mapper kami. 992 00:54:50,850 --> 00:54:55,770 Dan kita juga akan lulus beberapa fungsi, yang 993 00:54:55,770 --> 00:54:57,950 kami telah yang telah ditentukan di sini. 994 00:54:57,950 --> 00:54:59,690 Ia akan menjadi persegi. 995 00:54:59,690 --> 00:55:02,220 Dan kita akan kemudian persegi semua nombor-nombor 996 00:55:02,220 --> 00:55:04,710 dan menyimpan itu ke dalam keputusan ini di sini. 997 00:55:04,710 --> 00:55:07,280 998 00:55:07,280 --> 00:55:11,000 >> Jadi kes ini kita telah ditakrifkan kami fungsi sendiri dipanggil mapper. 999 00:55:11,000 --> 00:55:15,370 Tetapi perkara ini tepat adalah, sebenarnya, dibina ke dalam Swift. 1000 00:55:15,370 --> 00:55:18,960 Terdapat pelbagai fungsi dipanggil peta. 1001 00:55:18,960 --> 00:55:21,520 Ada fungsi peta, ada mengurangkan fungsi, 1002 00:55:21,520 --> 00:55:25,630 dan ada fungsi penapis, yang pada dasarnya menggunakan fungsi 1003 00:55:25,630 --> 00:55:30,782 untuk setiap elemen tunggal dalam senarai untuk mengubah suai mereka dalam beberapa cara. 1004 00:55:30,782 --> 00:55:34,510 >> PENONTON: Jadi kerana anda mengubah data ke dalam format lain 1005 00:55:34,510 --> 00:55:36,134 melalui function-- yang 1006 00:55:36,134 --> 00:55:37,050 DAN Armendariz: Betul. 1007 00:55:37,050 --> 00:55:39,420 Ya, jadi fungsi bahawa kami menerima 1008 00:55:39,420 --> 00:55:41,790 merubah data dalam beberapa cara. 1009 00:55:41,790 --> 00:55:44,700 Dalam kes ini, kita sama ada menyegiempatkan, atau kita telah cubing itu, 1010 00:55:44,700 --> 00:55:50,060 atau benar-benar, kita boleh melaksanakan tiada operasi di atasnya sama sekali. 1011 00:55:50,060 --> 00:55:54,150 >> Tetapi mari saya tunjukkan kepada anda kemudian bagaimana ini akan kelihatan dalam amalan. 1012 00:55:54,150 --> 00:55:56,681 Dan sekali lagi, saya menjalankan sedikit masa. jadi saya tidak 1013 00:55:56,681 --> 00:55:59,430 akan dapat pergi ke atas semua kod sumber di sini secara terperinci. 1014 00:55:59,430 --> 00:56:00,721 Tetapi saya menggalakkan anda untuk berbuat demikian. 1015 00:56:00,721 --> 00:56:03,850 Kami akan hantar secepat mungkin selepas ceramah ini. 1016 00:56:03,850 --> 00:56:07,610 >> Tetapi jika anda mengambil lihat pada ini, menganggap bahawa kita mempunyai senarai nombor, 1017 00:56:07,610 --> 00:56:10,260 pelbagai nombor dalam ini pembolehubah dipanggil nombor. 1018 00:56:10,260 --> 00:56:16,670 Kemudian kita mahu untuk melaksanakan ini operasi penapis pada nombor-nombor tersebut. 1019 00:56:16,670 --> 00:56:19,730 Jadi penapis yang lebih tinggi fungsi agar 1020 00:56:19,730 --> 00:56:24,660 menerima pelbagai dan juga fungsi. 1021 00:56:24,660 --> 00:56:28,760 Dan pada setiap elemen dalam yang pelbagai, ia melaksanakan fungsi itu. 1022 00:56:28,760 --> 00:56:31,990 >> Jika fungsi pulangan benar, ia menyimpan item tersebut. 1023 00:56:31,990 --> 00:56:36,100 Jika fungsi yang mengembalikan palsu, ia melemparkan jauh item tersebut. 1024 00:56:36,100 --> 00:56:40,480 Dan kemudian ia kembali senarai yang kemudian terdiri semua 1025 00:56:40,480 --> 00:56:44,360 item-item yang telah ditapis. 1026 00:56:44,360 --> 00:56:47,150 >> Jadi dalam erti kata lain, ini adalah idea yang sama, gradebook itu. 1027 00:56:47,150 --> 00:56:50,800 Kita mungkin mempunyai pelbagai gred ke ini nombor nilai dipanggil. 1028 00:56:50,800 --> 00:56:55,590 Boleh 100, dan 70, dan 40, sebagainya dan sebagainya. 1029 00:56:55,590 --> 00:56:59,110 Apa penapis ini tidak adalah notis bahawa ini adalah bahawa gula sintaksis 1030 00:56:59,110 --> 00:57:01,310 dengan fungsi tanpa nama. 1031 00:57:01,310 --> 00:57:05,980 Ini adalah satu fungsi tanpa nama berkata bahawa parameter bahawa saya menerima 1032 00:57:05,980 --> 00:57:09,690 akan menjadi, jika ia adalah lebih besar daripada 70, 1033 00:57:09,690 --> 00:57:15,837 maka ini akan kembali benar, bermakna barang yang akan disimpan dalam penapis ini. 1034 00:57:15,837 --> 00:57:17,920 Jadi mari kita menjadi sedikit lebih konkrit tentang perkara ini. 1035 00:57:17,920 --> 00:57:25,760 Jika saya mempunyai pelbagai ini nombor dan ia terdiri daripada 100, 70, dan 40, 1036 00:57:25,760 --> 00:57:29,730 Saya melaksanakan penapis ini kuasa pada setiap seorang daripada mereka. 1037 00:57:29,730 --> 00:57:33,270 Supaya pertama adalah nilai ini daripada 100. 1038 00:57:33,270 --> 00:57:36,770 100 lebih daripada atau sama hingga 70 adalah benar, yang 1039 00:57:36,770 --> 00:57:41,950 bermakna 100 disimpan di dalam salinan baru ini pelbagai ini. 1040 00:57:41,950 --> 00:57:44,290 70 juga berlalu. 1041 00:57:44,290 --> 00:57:46,020 Tetapi 40 tidak. 1042 00:57:46,020 --> 00:57:54,290 Jadi apa yang dikembalikan dalam passingCount adalah pelbagai unsur-unsur 100 dan 70-- 1043 00:57:54,290 --> 00:57:57,410 100, koma, 70. 1044 00:57:57,410 --> 00:57:59,870 Mereka itulah hanya dua barang-barang yang disimpan. 1045 00:57:59,870 --> 00:58:03,740 Dan sebagainya sebab saya cepat pergi melalui banyak ini jenis aras tinggi 1046 00:58:03,740 --> 00:58:08,680 perkara-perkara yang kerana ini adalah yang biasa perkara yang anda akan lihat dalam Swift cantik 1047 00:58:08,680 --> 00:58:16,810 kerap, sedang melakukan sesuatu operasi menggunakan ini Sintaks fungsi tanpa nama. 1048 00:58:16,810 --> 00:58:18,450 >> Ada beberapa barangan sejuk. 1049 00:58:18,450 --> 00:58:24,730 Suis benar-benar berkuasa dalam Swift, Maksud saya seperti gila, gila kuat. 1050 00:58:24,730 --> 00:58:28,250 Anda boleh menggunakan suis, dan anda sebenarnya boleh memohon mereka 1051 00:58:28,250 --> 00:58:33,160 kepada julat, yang jenis gila, dan melakukan barangan mewah seperti itu. 1052 00:58:33,160 --> 00:58:37,540 >> Tetapi dalam beberapa minit terakhir, Saya hendak melangkau ke hadapan agak jauh 1053 00:58:37,540 --> 00:58:46,940 dan menunjukkan contoh khusus tentang bagaimana kita boleh membuat dalam aplikasi iOS menggunakan Swift. 1054 00:58:46,940 --> 00:58:49,040 Oleh itu, apabila anda lakukan ini, anda akan perlu untuk mengambil 1055 00:58:49,040 --> 00:58:51,990 yang kelihatan at-- pada Apple dokumentasi, mereka 1056 00:58:51,990 --> 00:58:56,084 mempunyai banyak tutorial benar-benar baik untuk membuat permohonan pertama anda. 1057 00:58:56,084 --> 00:58:58,250 Dan saya menggalakkan anda untuk melakukan itu kerana mereka membawa anda 1058 00:58:58,250 --> 00:59:04,110 melalui semua langkah-langkah apa yang perlu klik pada untuk membina satu permohonan IOS. 1059 00:59:04,110 --> 00:59:07,290 >> Tetapi di sini kita mempunyai aplikasi iOS ini. 1060 00:59:07,290 --> 00:59:10,960 Dan ia adalah satu aplikasi yang agak mudah benar-benar. 1061 00:59:10,960 --> 00:59:13,840 Jika saya menjalankan ini, mari saya tunjukkan anda apa yang ia kelihatan seperti. 1062 00:59:13,840 --> 00:59:19,480 Apa yang pada dasarnya tidak adalah ia menarik dari internet fail JSON 1063 00:59:19,480 --> 00:59:22,300 bahawa saya telah disimpan pada pelayan. 1064 00:59:22,300 --> 00:59:26,310 Dan bahawa fail JSON mentakrifkan imej yang membolehkan 1065 00:59:26,310 --> 00:59:31,680 saya kemudian memutar, pada saya app, imej dari pelayan web saya. 1066 00:59:31,680 --> 00:59:32,880 >> Oleh itu, saya ada di sini getNextImage. 1067 00:59:32,880 --> 00:59:37,100 Ia memuatkan imej dari internet, dan kemudian memaparkan ia pada skrin. 1068 00:59:37,100 --> 00:59:38,200 >> Jadi ia adalah agak mudah. 1069 00:59:38,200 --> 00:59:41,550 Tetapi matlamat di sini adalah untuk menunjukkan anda bagaimana kita boleh menggabungkan perkara-perkara 1070 00:59:41,550 --> 00:59:47,820 dari beberapa minggu kedua CS50 ke dalam satu aplikasi iOS yang sebenar. 1071 00:59:47,820 --> 00:59:53,140 Dalam erti kata lain, mungkin salah satu daripada perkara yang anda akan mahu lakukan 1072 00:59:53,140 --> 00:59:56,340 adalah untuk mempunyai aplikasi iOS yang boleh tarik data dari internet 1073 00:59:56,340 --> 00:59:59,070 dan menunjukkan pengguna beberapa maklumat. 1074 00:59:59,070 --> 01:00:03,130 Yang sepenuhnya titik kod sumber ini di sini. 1075 01:00:03,130 --> 01:00:07,890 >> Jadi ada banyak yang boleh dikatakan tentang bagaimana untuk melakukan pembangunan iOS yang sebenar. 1076 01:00:07,890 --> 01:00:12,860 Terdapat banyak sintaks gila bahawa kita tidak pernah melihat agak lagi 1077 01:00:12,860 --> 01:00:15,580 seperti kelas, apa kelas yang sebenarnya. 1078 01:00:15,580 --> 01:00:19,470 Kami sebahagian besarnya boleh mengabaikan yang pada masa ini. 1079 01:00:19,470 --> 01:00:23,250 >> Tetapi notis bahawa kita telah terkandung dalam ini pelbagai perkara 1080 01:00:23,250 --> 01:00:27,720 bahawa kita telah pun melihat seperti fungsi yang mempunyai nama-nama tertentu. 1081 01:00:27,720 --> 01:00:32,650 Dan apabila kita memberi mereka berfungsi nama nama yang betul 1082 01:00:32,650 --> 01:00:36,530 yang dijangka oleh IOS, sebenarnya ini berasa sedikit ajaib. 1083 01:00:36,530 --> 01:00:40,300 Tetapi apabila anda membuat aplikasi iOS, terdapat 1084 01:00:40,300 --> 01:00:47,590 adalah nama-nama fungsi tertentu yang dipanggil oleh telefon itu sendiri 1085 01:00:47,590 --> 01:00:52,440 sebagai permohonan is loading untuk mencuba untuk mewujudkan proses yang sebenarnya 1086 01:00:52,440 --> 01:00:54,787 berjalan permohonan anda. 1087 01:00:54,787 --> 01:00:58,120 Jadi sekali lagi, ada banyak perkara yang saya perlu menyembunyikan di sini dalam usaha untuk kita 1088 01:00:58,120 --> 01:01:00,570 bercakap tentang perkara ini secara khusus. 1089 01:01:00,570 --> 01:01:06,050 Tetapi saya menggalakkan anda untuk melihat mungkin seminar iOS yang lain, tetapi juga beberapa 1090 01:01:06,050 --> 01:01:09,290 daripada talian tutorial yang melakukan pekerjaan yang lebih baik untuk menerangkan 1091 01:01:09,290 --> 01:01:11,030 maklumat tertentu. 1092 01:01:11,030 --> 01:01:15,760 >> Tetapi kita dapat melihat beberapa perkara yang adalah menarik dari kod di sini. 1093 01:01:15,760 --> 01:01:17,950 Perhatikan yang kita ada jika kenyataan. 1094 01:01:17,950 --> 01:01:20,400 Dengan cara ini, salah satu yang penting perkara tentang jika kenyataan 1095 01:01:20,400 --> 01:01:24,860 adalah bahawa kurungan sekitar Ungkapan Boolean adalah pilihan. 1096 01:01:24,860 --> 01:01:30,800 Tetapi pendakap kerinting tidak adalah pilihan, tidak kira berapa sedikit atau banyak baris kod 1097 01:01:30,800 --> 01:01:32,360 anda ada dalam jika kenyataan. 1098 01:01:32,360 --> 01:01:38,670 Anda tidak boleh mempunyai jika kenyataan tanpa pendakap kerinting di Swift. 1099 01:01:38,670 --> 01:01:41,000 >> Dan ini adalah, baik, jenis bodoh. 1100 01:01:41,000 --> 01:01:43,910 Tetapi ada sebab-sebab sejarah untuk itu. 1101 01:01:43,910 --> 01:01:46,180 Ia sepatutnya menyelamatkan kamu dari diri sendiri. 1102 01:01:46,180 --> 01:01:49,899 Seperti ini sebagai contoh, anda tidak boleh menghapuskan pendakap kerinting sekitar yang 1103 01:01:49,899 --> 01:01:50,440 jika kenyataan. 1104 01:01:50,440 --> 01:01:52,730 Mereka adalah sebenarnya diperlukan. 1105 01:01:52,730 --> 01:01:54,480 Jadi saya menggalakkan anda untuk kita lihat ini. 1106 01:01:54,480 --> 01:01:56,230 Tetapi ada satu lagi membina yang saya mahu 1107 01:01:56,230 --> 01:02:02,640 untuk menunjukkan kepada anda tentang Swift yang baru kepada Swift 2.0 berbanding 1108 01:02:02,640 --> 01:02:08,460 untuk versi yang lebih lama Swift, yang berikut. 1109 01:02:08,460 --> 01:02:11,620 Mari kita lihat di mana saya meletakkan ia di sini? 1110 01:02:11,620 --> 01:02:16,630 >> Jadi dalam fungsi ini dipanggil fetchJSON, fungsi ini 1111 01:02:16,630 --> 01:02:23,450 bertanggungjawab untuk menarik yang JSON memfailkan dari URL, yang hanya kebetulan 1112 01:02:23,450 --> 01:02:26,310 berjalan di IDE CS50 saya. 1113 01:02:26,310 --> 01:02:28,580 Saya hanya mula Apache, meletakkan fail JSON saya di sana, 1114 01:02:28,580 --> 01:02:32,110 dan saya dapat kemudian tarik yang data dari internet menggunakan 1115 01:02:32,110 --> 01:02:36,430 fungsi ini dan URL ini, yang disediakan oleh telefon. 1116 01:02:36,430 --> 01:02:40,490 Ia disediakan oleh perpustakaan yang anda gunakan apabila 1117 01:02:40,490 --> 01:02:43,140 yang anda lakukan beberapa IOS pembangunan aplikasi. 1118 01:02:43,140 --> 01:02:49,690 >> Perhatikan di sini bahawa ada ini luar biasa membina sintaksis dipanggil pengawal. 1119 01:02:49,690 --> 01:02:53,530 Dan benar-benar semua ini adalah dalam Swift adalah satu cara untuk mengesahkan 1120 01:02:53,530 --> 01:02:56,870 bahawa beberapa perkara yang mempunyai telah dipenuhi sebelum anda 1121 01:02:56,870 --> 01:03:00,000 meneruskan dengan seluruh fungsi. 1122 01:03:00,000 --> 01:03:04,260 Jadi saya boleh mempunyai, menggunakan jenis pilihan ini, 1123 01:03:04,260 --> 01:03:10,530 Saya boleh mendapati URL dengan menjalankan fungsi NSURL ini 1124 01:03:10,530 --> 01:03:16,640 dan menyimpan itu ke dalam URL berterusan, dan kemudian memeriksa 1125 01:03:16,640 --> 01:03:20,820 untuk melihat jika URL adalah sifar, kerana ia itu akan kembali jenis pilihan. 1126 01:03:20,820 --> 01:03:25,660 Dan jika ia adalah sifar, maka saya akan mencetak kesilapan dan akan terus pulang. 1127 01:03:25,660 --> 01:03:29,970 >> Tetapi sebaliknya, apa pengawal membolehkan kita lakukan adalah perkara yang sangat, 1128 01:03:29,970 --> 01:03:34,550 tetapi memastikan bahawa ia adalah sebenarnya kes yang url 1129 01:03:34,550 --> 01:03:38,020 telah benar yang ditetapkan oleh NSURL. 1130 01:03:38,020 --> 01:03:41,810 Dan jika ia, maka ia melangkau lebih ini, dan ia 1131 01:03:41,810 --> 01:03:46,110 akan membolehkan anda untuk meneruskan url setelah betul ditakrifkan. 1132 01:03:46,110 --> 01:03:48,830 Tetapi jika ia adalah kes yang url adalah tidak betul ditakrifkan, 1133 01:03:48,830 --> 01:03:52,550 jika fungsi ini mengembalikan ralat atau beberapa perkara lain yang tidak dijangka 1134 01:03:52,550 --> 01:03:58,030 sebenarnya berlaku, membina pengawal ini membolehkan kita maka output bahawa kesilapan 1135 01:03:58,030 --> 01:04:00,390 dan pulang dengan segera. 1136 01:04:00,390 --> 01:04:00,890 Ya? 1137 01:04:00,890 --> 01:04:04,839 >> PENONTON: Jadi ia adalah jenis daripada seperti jika kemudian yang berlainan? 1138 01:04:04,839 --> 01:04:07,130 DAN Armendariz: Ia adalah jenis seperti jika kemudian lagi, ya, 1139 01:04:07,130 --> 01:04:14,200 kecuali url ini kemudian ditakrifkan untuk segala-galanya di bawah ini. 1140 01:04:14,200 --> 01:04:20,420 Jika ia melepasi pengawal ini, maka ia sebenarnya akan diisi dengan data 1141 01:04:20,420 --> 01:04:29,500 dan boleh digunakan dalam baki kod sumber dalam fungsi anda. 1142 01:04:29,500 --> 01:04:33,790 Jadi, saya mengesyaki bahawa anda akan mula melihat pengawal ini juga. 1143 01:04:33,790 --> 01:04:36,670 Dan ingat bahawa. 1144 01:04:36,670 --> 01:04:46,270 >> Jadi hanya melihat beberapa lain perkara, hak ini di sini ialah apa, 1145 01:04:46,270 --> 01:04:53,377 yang anda fikir, hanya berdasarkan kepada apa yang kita bercakap tentang sebelum ini? 1146 01:04:53,377 --> 01:04:56,650 >> PENONTON: Fikirkan ia akan berjalan dalam senarai? 1147 01:04:56,650 --> 01:04:59,100 >> DAN Armendariz: Jadi itu dekat. 1148 01:04:59,100 --> 01:05:02,360 Ini adalah satu fungsi yang kita menentukan. 1149 01:05:02,360 --> 01:05:07,240 Dan kita memasukkan fungsi yang sebagai argumen kepada fungsi ini di sini. 1150 01:05:07,240 --> 01:05:09,120 >> PENONTON: [didengar] jika tidak sifar. 1151 01:05:09,120 --> 01:05:11,470 Jadi ia adalah dalam senarai, bukan? 1152 01:05:11,470 --> 01:05:15,450 >> DAN Armendariz: Jika ralat tidak sifar, supaya is-- jadi saya perlu untuk menatal. 1153 01:05:15,450 --> 01:05:18,060 Nah, mari kita lihat, saya tidak boleh benar-benar tatal ke kanan di sini. 1154 01:05:18,060 --> 01:05:23,161 kesilapan adalah hujah yang sedang dihantar ke fungsi tanpa nama ini. 1155 01:05:23,161 --> 01:05:24,410 Ini adalah satu fungsi tanpa nama. 1156 01:05:24,410 --> 01:05:25,480 Ia tidak mempunyai nama. 1157 01:05:25,480 --> 01:05:29,850 Tetapi kami menerima ketiga-tiga hujah-hujah, data, tindak balas, dan kesilapan. 1158 01:05:29,850 --> 01:05:33,590 Dan ia akan kembali tidak sah, jadi ia tidak akan kembali apa-apa. 1159 01:05:33,590 --> 01:05:37,910 Dan ini adalah kandungan fungsi tersebut. 1160 01:05:37,910 --> 01:05:41,961 Dan kemudian kita mempunyai akses di dalam yang fungsi kepada setiap hujah-hujah ini. 1161 01:05:41,961 --> 01:05:45,650 1162 01:05:45,650 --> 01:05:48,679 >> Jadi ia adalah keturunan yang masih kecil lawatan bahasa. 1163 01:05:48,679 --> 01:05:50,470 Tetapi saya berharap dengan ini, mudah-mudahan anda mengambil 1164 01:05:50,470 --> 01:05:54,490 lihat beberapa tutorial khusus untuk pembangunan iOS dengan Swift, 1165 01:05:54,490 --> 01:05:57,481 terutamanya jika anda pergi ke Apple pemaju web page-- 1166 01:05:57,481 --> 01:05:59,980 mereka mempunyai banyak benar-benar baik tutorial untuk anda bermula. 1167 01:05:59,980 --> 01:06:05,010 Tetapi mudah-mudahan hanya jam ini bercakap mengenai sintaks itu sendiri telah memberikan 1168 01:06:05,010 --> 01:06:08,760 anda cukup untuk memulakan dengan itu. 1169 01:06:08,760 --> 01:06:12,950 >> Kami akan menyiarkan semua sumber ini kod pada laman web seminar 1170 01:06:12,950 --> 01:06:17,800 dengan seberapa segera yang mungkin, dan juga slaid supaya anda mempunyai rujukan untuk semua orang. 1171 01:06:17,800 --> 01:06:20,530 Tetapi nasib baik dengan projek-projek anda. 1172 01:06:20,530 --> 01:06:23,640 Dan terima kasih semua kerana sudi datang. 1173 01:06:23,640 --> 01:06:26,990 >> [Tepuk tangan] 1174 01:06:26,990 --> 01:06:28,026