1 00:00:00,000 --> 00:00:03,332 >> [MUSIC PLAYING] 2 00:00:03,332 --> 00:00:06,200 3 00:00:06,200 --> 00:00:09,590 >> DAN AMRMENDARIZ: Semua orang, selamat datang ke seminar CS50, 4 00:00:09,590 --> 00:00:11,690 iOS App Pembangunan dengan Swift. 5 00:00:11,690 --> 00:00:15,690 Aku Dan Armendariz, dan aku pembimbing yang ilmu komputer di Harvard. 6 00:00:15,690 --> 00:00:21,510 >> Dan satu jam berikutnya akan menjadi tur angin puyuh sebanyak barang 7 00:00:21,510 --> 00:00:25,160 tentang topik ini seperti yang kita bisa cocok. 8 00:00:25,160 --> 00:00:29,170 Saya akan posting semua kode sumber Anda akan melihat hari ini online. 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 bahwa aku bahwa aku menunjukkan Anda pada saat ini. 11 00:00:34,810 --> 00:00:37,580 Tapi setidaknya mudah-mudahan melalui komentar-komentar dari kode sumber, 12 00:00:37,580 --> 00:00:40,830 Anda akan dapat mencoba untuk mencari tahu apa yang sebenarnya terjadi untuk hal-hal 13 00:00:40,830 --> 00:00:42,950 bahwa kita tidak cukup sampai ke. 14 00:00:42,950 --> 00:00:46,970 >> Secara keseluruhan, struktur bicara hari ini akan sebagai berikut. 15 00:00:46,970 --> 00:00:52,820 Kami akan mulai melakukan beberapa dasar sintaks dengan bahasa Swift, 16 00:00:52,820 --> 00:00:56,290 pergi ke beberapa lebih maju sintaks dari bahasa Swift. 17 00:00:56,290 --> 00:00:59,560 Karena bahasa benar-benar modern dan 18 00:00:59,560 --> 00:01:02,110 memiliki banyak tingkat tinggi fitur, hal-hal yang kita tidak 19 00:01:02,110 --> 00:01:06,600 terlihat di C seluruh CS50, atau bahkan beberapa bahasa lainnya 20 00:01:06,600 --> 00:01:09,310 bahwa kita sudah mulai menggunakan di CS50 seperti PHP, 21 00:01:09,310 --> 00:01:12,670 jadi saya akan harus mencoba untuk memperkenalkan juga beberapa topik yang 22 00:01:12,670 --> 00:01:18,580 terkait dengan bahasa tingkat tinggi Anda mungkin tidak melihat secara mendalam dalam CS50, 23 00:01:18,580 --> 00:01:21,380 tetapi Anda akan melihat nanti kelas ilmu komputer. 24 00:01:21,380 --> 00:01:25,290 Jadi itu akan menjadi erat dikemas jam. 25 00:01:25,290 --> 00:01:28,897 Dan jangan ragu untuk membiarkan saya tahu jika Anda memiliki pertanyaan. 26 00:01:28,897 --> 00:01:30,730 Jadi jika Anda tertarik dalam melakukan pengembangan 27 00:01:30,730 --> 00:01:34,442 dengan Swift, atau benar-benar setiap pengembangan aplikasi iOS, 28 00:01:34,442 --> 00:01:35,900 ada beberapa persyaratan. 29 00:01:35,900 --> 00:01:39,940 Pertama-tama, Anda harus menggunakan Mac, berjalan di contoh 30 00:01:39,940 --> 00:01:43,880 bahwa kita akan menggunakan hari ini, versi yang relatif baru OS 31 00:01:43,880 --> 00:01:46,580 X. Dalam hal ini, saya sedang menjalankan X 10.5. 32 00:01:46,580 --> 00:01:48,600 Anda dapat berjalan 10.11 jika Anda ingin. 33 00:01:48,600 --> 00:01:52,430 Tapi segala sesuatu yang Anda akan lihat adalah melibatkan Xcode 7 dan kemudian, 34 00:01:52,430 --> 00:01:56,271 yang memiliki versi terbaru Swift, yang merupakan Swift 2.0. 35 00:01:56,271 --> 00:01:58,270 Ini sebenarnya cukup perbedaan penting. 36 00:01:58,270 --> 00:02:01,510 Banyak sintaks memiliki berubah cukup signifikan 37 00:02:01,510 --> 00:02:05,890 dalam beberapa kasus dari Swift 1.0, yang dirilis tahun lalu, 38 00:02:05,890 --> 00:02:08,514 untuk Swift 2.0, yang baru saja keluar musim gugur ini. 39 00:02:08,514 --> 00:02:09,889 Jadi kita akan menunjukkan Swift 2.0. 40 00:02:09,889 --> 00:02:13,020 Banyak hal-hal yang Anda mencari secara online 41 00:02:13,020 --> 00:02:18,040 ketika Anda mencoba untuk mendapatkan tambahan informasi tentang berbagai hal, 42 00:02:18,040 --> 00:02:20,710 Anda mungkin ingin secara eksplisit mencari Swift 2 43 00:02:20,710 --> 00:02:24,950 daripada Swift sekadar tua untuk membuat Pastikan bahwa Anda mendapatkan sintaks yang benar. 44 00:02:24,950 --> 00:02:26,920 >> Bahkan, ini umumnya benar. 45 00:02:26,920 --> 00:02:31,210 Ada sejumlah cepat pembangunan terjadi dalam bahasa Swift 46 00:02:31,210 --> 00:02:35,110 sejak Apple merilis itu, saya pikir apa, sudah sedikit lebih dari satu tahun 47 00:02:35,110 --> 00:02:36,370 sekarang. 48 00:02:36,370 --> 00:02:39,080 Dan hal yang telah berubah dramatis pada waktu itu. 49 00:02:39,080 --> 00:02:42,160 Dan jadi jangan frustrasi jika, ketika Anda mencari di sekitar 50 00:02:42,160 --> 00:02:48,310 untuk topik tentang Swift atau bagaimana untuk mencapai sesuatu yang menggunakan beberapa contoh kode 51 00:02:48,310 --> 00:02:51,210 atau sesuatu yang tidak benar-benar bekerja pada Swift 2.0. 52 00:02:51,210 --> 00:02:53,790 Pastikan Anda mencari khusus untuk versi yang 53 00:02:53,790 --> 00:02:58,690 mencoba untuk meminimalkan efek yang berbeda versi dan orang-orang macam hal. 54 00:02:58,690 --> 00:03:02,470 >> Saya akan mencoba untuk menunjukkan hanya beberapa hal yang berbeda dengan versi yang lebih tua. 55 00:03:02,470 --> 00:03:03,970 Tapi itu sesuatu yang harus diperhatikan. 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 bahwa Anda akan memiliki dengan Swift adalah menemukan contoh kode yang lebih tua, bahkan hanya 58 00:03:11,010 --> 00:03:14,050 oleh beberapa bulan, mencoba untuk menggunakan dalam proyek modern Anda lebih. 59 00:03:14,050 --> 00:03:15,430 Dan itu hanya cukup tidak bekerja. 60 00:03:15,430 --> 00:03:18,530 Anda mendapatkan kesalahan kompilator, sintaks kesalahan, segala macam hal gila. 61 00:03:18,530 --> 00:03:21,580 Jadi hanya bersabar dengan itu, dan mudah-mudahan Anda akan 62 00:03:21,580 --> 00:03:24,200 memiliki pengalaman yang cukup bagus dengan keseluruhan Swift. 63 00:03:24,200 --> 00:03:28,430 >> Sekarang Anda dapat benar-benar join-- dan saya berharap kita sebenarnya masih memiliki ini year-- ini 64 00:03:28,430 --> 00:03:30,910 CS 50 Apple app tim pengembangan, yang 65 00:03:30,910 --> 00:03:34,680 akan memungkinkan Anda untuk menginstal aplikasi apapun yang Anda buat pada perangkat iOS Anda. 66 00:03:34,680 --> 00:03:39,190 Jadi kita lihat URL ini jika Anda tertarik untuk melakukan itu. 67 00:03:39,190 --> 00:03:41,450 >> Jadi hanya beberapa hal tentang Swift sendiri. 68 00:03:41,450 --> 00:03:43,580 Ini adalah bahasa yang dikompilasi. 69 00:03:43,580 --> 00:03:45,870 Tapi Anda akan melihat bahwa beberapa fitur yang kita gunakan 70 00:03:45,870 --> 00:03:50,650 memungkinkan untuk digunakan juga dalam sedikit seperti ditafsirkan cara juga. 71 00:03:50,650 --> 00:03:56,350 >> Banyak sintaks yang dipinjam dari C. Ini didasarkan dan ditulis dalam C. 72 00:03:56,350 --> 00:04:00,400 Dan jadi kita akan melihat bahwa ada banyak takeaways 73 00:04:00,400 --> 00:04:04,450 dari pengetahuan yang ada dari C yang kita dapat port untuk Swift. 74 00:04:04,450 --> 00:04:07,290 >> Tapi ada hal-hal yang membuatnya sangat berbeda dari C. 75 00:04:07,290 --> 00:04:08,860 Hal ini sangat sangat diketik. 76 00:04:08,860 --> 00:04:10,380 Ada manajemen memori otomatis. 77 00:04:10,380 --> 00:04:13,170 Anda tidak akan harus menggunakan malloc atau di mana saja gratis. 78 00:04:13,170 --> 00:04:15,110 Ini dirancang untuk umum. 79 00:04:15,110 --> 00:04:19,480 Jadi dengan kata lain, Anda dapat menggunakannya dalam segala macam konteks, dari Apple Perhiasan 80 00:04:19,480 --> 00:04:26,290 untuk iPhone semua jalan sampai ke OS X, dan bahkan beberapa server, bahkan beberapa scripting. 81 00:04:26,290 --> 00:04:28,400 Tapi kita akan melihat bahwa dukungan untuk scripting 82 00:04:28,400 --> 00:04:31,360 tidak cukup ada belum seperti itu dalam bahasa lain. 83 00:04:31,360 --> 00:04:34,930 Jadi kemungkinan besar Anda akan menggunakan ini secara eksklusif untuk pembangunan 84 00:04:34,930 --> 00:04:37,060 di Mac atau iPhone Anda. 85 00:04:37,060 --> 00:04:40,150 >> Dan memiliki banyak fitur modern. 86 00:04:40,150 --> 00:04:43,380 Dan banyak hal-hal ini hal-hal yang kita akan mencoba untuk mengatasi hari ini, 87 00:04:43,380 --> 00:04:47,590 tetapi juga topik kita yang terus terang, kita bisa mencurahkan seluruh program. 88 00:04:47,590 --> 00:04:50,140 Bahkan, CS 51, yang merupakan ditawarkan semester berikutnya, 89 00:04:50,140 --> 00:04:53,990 berfokus banyak tentang topik ini yang dijelaskan di bawah ini. 90 00:04:53,990 --> 00:04:56,781 Sehingga Anda dapat menghabiskan seluruh semester memahami hal-hal ini. 91 00:04:56,781 --> 00:04:58,530 Tapi kami akan mencoba untuk mendapatkan melalui mereka 92 00:04:58,530 --> 00:05:00,800 setidaknya cukup bahwa Anda dapat memahami apa 93 00:05:00,800 --> 00:05:03,700 terjadi ketika Anda melihat di program Swift 94 00:05:03,700 --> 00:05:07,310 dan dapat hack cara Anda melalui itu untuk tugas akhir. 95 00:05:07,310 --> 00:05:10,780 >> Sekarang salah satu cara terbaik yang dapat Anda mendapatkan informasi tambahan tentang ini 96 00:05:10,780 --> 00:05:14,700 terus terang saja melalui Apple disediakan dokumentasi untuk Swift. 97 00:05:14,700 --> 00:05:16,930 Ada banyak API yang tersedia. 98 00:05:16,930 --> 00:05:21,170 Dan ini adalah dasar rumah yang baik untuk Anda untuk mencari, hal-hal tertentu yang Anda 99 00:05:21,170 --> 00:05:23,020 ingin melakukan dengan API melibatkan iOS. 100 00:05:23,020 --> 00:05:26,350 Jika Anda ingin menggunakan kamera untuk Misalnya, Anda dapat mulai mencari di sini, 101 00:05:26,350 --> 00:05:32,540 dan juga menggunakan Google dan Stack Melimpah seperti biasa. 102 00:05:32,540 --> 00:05:36,670 >> Pertanyaan ini sebelum kita melompat ke kanan? 103 00:05:36,670 --> 00:05:37,880 Baiklah. 104 00:05:37,880 --> 00:05:38,700 Mari kita lanjutkan. 105 00:05:38,700 --> 00:05:42,620 >> Jadi pertama, saya memiliki jumlah contoh file. 106 00:05:42,620 --> 00:05:46,040 Dan aku akan mencoba untuk melangkah melalui mereka relatif cepat. 107 00:05:46,040 --> 00:05:49,190 Ini adalah file Hello World untuk Swift. 108 00:05:49,190 --> 00:05:51,050 Ini sangat sederhana. 109 00:05:51,050 --> 00:05:54,360 Ada cara yang lebih komentar daripada ada kode aktual. 110 00:05:54,360 --> 00:05:57,100 Perhatikan kode aktual di bagian paling bawah pada baris 14. 111 00:05:57,100 --> 00:05:57,980 Dikatakan cetak. 112 00:05:57,980 --> 00:05:59,820 Dan maka itu panggilan fungsi. 113 00:05:59,820 --> 00:06:03,010 Kami melewati ke dalamnya string disebut Hello CS50. 114 00:06:03,010 --> 00:06:04,750 Perhatikan bahwa tidak ada titik koma. 115 00:06:04,750 --> 00:06:07,010 Perhatikan bahwa tidak ada int main. 116 00:06:07,010 --> 00:06:10,392 Ada tidak ada yang cruft yang kita miliki dengan C. 117 00:06:10,392 --> 00:06:15,020 Ketika kita menggunakan Swift dengan cara ini, yang hanya ditulis dalam sebuah file teks 118 00:06:15,020 --> 00:06:18,340 dan disimpan di komputer saya, maka Saya dapat mengkompilasi dan menjalankannya. 119 00:06:18,340 --> 00:06:20,920 >> Perhatikan bahwa di sini aku tidak menggunakan IDE CS50. 120 00:06:20,920 --> 00:06:24,460 Ini mengasumsikan bahwa saya berjalan dan bahwa aku pada OS X, 121 00:06:24,460 --> 00:06:27,870 dan bahwa saya telah Xcode sudah terinstal pada mesin ini agar ini 122 00:06:27,870 --> 00:06:29,080 untuk benar-benar berfungsi. 123 00:06:29,080 --> 00:06:33,349 Tapi ini hanya sebuah file teks biasa bahwa kita kemudian dapat mengkompilasi dan mengedit. 124 00:06:33,349 --> 00:06:34,890 Jadi mari kita lihat bagaimana ini benar-benar bekerja. 125 00:06:34,890 --> 00:06:37,430 Bagaimana jika saya ingin melakukan kompilasi? 126 00:06:37,430 --> 00:06:40,450 1.swift swiftc. 127 00:06:40,450 --> 00:06:42,960 Setelah beberapa saat, itu akan melihat bahwa kita memiliki sekarang 128 00:06:42,960 --> 00:06:45,360 disusun ini ke file bernama 1. 129 00:06:45,360 --> 00:06:51,090 Dan sekarang kami telah dicetak CS50 kami, Aplikasi Hello World kita bukan. 130 00:06:51,090 --> 00:06:54,690 >> Perhatikan satu hal lain baik adalah bahwa secara default, 131 00:06:54,690 --> 00:07:00,090 kita tidak perlu masukan a / n untuk mencetak baris baru. 132 00:07:00,090 --> 00:07:05,315 Secara default, fungsi cetak dalam Swift akan mencetak baris baru untuk Anda. 133 00:07:05,315 --> 00:07:09,284 Anda dapat melewati tambahan opsional parameter untuk menceritakannya untuk tidak melakukannya. 134 00:07:09,284 --> 00:07:10,950 Tapi Google untuk informasi lebih lanjut tentang itu. 135 00:07:10,950 --> 00:07:13,450 Secara default, ia akan melakukan garis cetak. 136 00:07:13,450 --> 00:07:16,420 >> Baiklah, jadi mari kita lanjutkan kemudian ke hal-hal lain. 137 00:07:16,420 --> 00:07:18,620 Jadi bagaimana kita bisa benar-benar mendefinisikan variabel? 138 00:07:18,620 --> 00:07:21,960 Kita bisa melakukan itu menggunakan salah satu dari dua metode. 139 00:07:21,960 --> 00:07:26,122 Dan salah satu yang saya ingin memberitahu Anda tentang pertama adalah definisi membiarkan ini. 140 00:07:26,122 --> 00:07:27,830 Dan ini penting karena secara efektif 141 00:07:27,830 --> 00:07:30,240 apa yang kita lakukan adalah mendefinisikan konstan. 142 00:07:30,240 --> 00:07:34,010 Kita akan membuat sebuah variabel, atau lebih tepatnya disebut nama konstan, 143 00:07:34,010 --> 00:07:38,200 menyediakan untuk itu beberapa data-- di hal ini, string Dan. 144 00:07:38,200 --> 00:07:40,630 Tapi dengan menggunakan membiarkan ini kata kunci, kita katakan 145 00:07:40,630 --> 00:07:43,860 bahwa ini variable-- atau lagi constant-- disebut 146 00:07:43,860 --> 00:07:46,220 Nama tidak akan pernah berubah. 147 00:07:46,220 --> 00:07:50,120 Ini akan menjadi berubah sepanjang durasi program ini 148 00:07:50,120 --> 00:07:53,100 atau seluruh durasi konteks 149 00:07:53,100 --> 00:07:55,390 bahwa variabel yang tersedia. 150 00:07:55,390 --> 00:08:00,096 >> Ini benar-benar penting bahwa ketika Anda memiliki beberapa data yang tidak 151 00:08:00,096 --> 00:08:02,970 akan mengubah dalam program Anda, dan Anda akan melihat berbagai contoh 152 00:08:02,970 --> 00:08:06,790 tentang ketika kita ingin menggunakan biarkan versus sintaks lainnya, 153 00:08:06,790 --> 00:08:11,040 penting bahwa Anda menggunakan membiarkan sedapat mungkin karena notifikasi ini 154 00:08:11,040 --> 00:08:13,740 bahasa bahwa itu adalah tidak akan berubah, 155 00:08:13,740 --> 00:08:16,590 dan itu benar-benar dapat melakukan banyak optimasi 156 00:08:16,590 --> 00:08:19,560 untuk meningkatkan kecepatan dan keamanan program Anda. 157 00:08:19,560 --> 00:08:24,480 Dan oleh keamanan, maksud saya tidak membiarkan itu kecelakaan dengan kesalahan gila 158 00:08:24,480 --> 00:08:27,910 bahwa kita mungkin terbiasa melihat di C. 159 00:08:27,910 --> 00:08:32,460 >> Maka kita bisa menggunakan interpolasi string untuk merangkum ini dalam string. 160 00:08:32,460 --> 00:08:35,200 Jadi kita bisa melihat dalam hal ini garis cetak, mencetak halo, 161 00:08:35,200 --> 00:08:38,950 dan kemudian menggunakan backslash parens terbuka, dan kemudian nama variabel saya, 162 00:08:38,950 --> 00:08:41,809 dalam hal ini konstan, menutup kurung. 163 00:08:41,809 --> 00:08:46,400 Saya pada dasarnya kemudian menempatkan isi dari variabel disebut nama ini 164 00:08:46,400 --> 00:08:50,240 dalam string dan kemudian mencetak hasilnya ada. 165 00:08:50,240 --> 00:08:54,070 >> Ada satu perubahan lain ke file ini yang yang saya miliki, di bagian paling atas, 166 00:08:54,070 --> 00:08:57,340 dimasukkan ke dalam garis peristiwa, yang pada dasarnya hanya menentukan 167 00:08:57,340 --> 00:09:00,180 yang saya ingin menggunakan Interpreter Swift, yang 168 00:09:00,180 --> 00:09:04,190 berarti bahwa saya tidak lagi harus mengkompilasi program khusus ini. 169 00:09:04,190 --> 00:09:06,567 Aku hanya bisa menjalankannya seperti script sendiri. 170 00:09:06,567 --> 00:09:09,400 Tapi ini, dalam hal ini, di belakang adegan yang disusun dan kemudian 171 00:09:09,400 --> 00:09:10,030 yang dijalankan. 172 00:09:10,030 --> 00:09:13,540 Itu hanya terlihat oleh kita. 173 00:09:13,540 --> 00:09:15,880 >> Baiklah, jadi mari kita lanjutkan. 174 00:09:15,880 --> 00:09:19,650 Jadi ada sedikit tipu yang baru saja terjadi sebelumnya. 175 00:09:19,650 --> 00:09:23,230 Saya menunjukkan bahwa saya bisa mendefinisikan konstan. 176 00:09:23,230 --> 00:09:25,490 Dan saya bisa memberikan beberapa data untuk melakukannya. 177 00:09:25,490 --> 00:09:29,240 Tapi dalam kasus ini, perhatikan bahwa saya tidak sebenarnya menentukan jenis data 178 00:09:29,240 --> 00:09:29,820 bahwa itu adalah. 179 00:09:29,820 --> 00:09:32,780 Dan itu karena compiler, Swift bisa 180 00:09:32,780 --> 00:09:36,910 menyimpulkan jenis data hanya berdasarkan pada data yang saya dimasukkan ke dalamnya. 181 00:09:36,910 --> 00:09:41,760 Karena ia tahu bahwa dengan mengevaluasi ini variabel di sini, ini data yang benar 182 00:09:41,760 --> 00:09:43,370 di sini, ia tahu bahwa itu adalah sebuah string. 183 00:09:43,370 --> 00:09:48,690 Dan nama konstan ini karena itu akan menjadi string juga. 184 00:09:48,690 --> 00:09:52,730 >> Tapi kita juga bisa eksplisit tentang jenis yang 185 00:09:52,730 --> 00:09:55,790 kita akan gunakan untuk konstanta atau variabel 186 00:09:55,790 --> 00:10:01,590 dengan menggunakan sintaks ini instead-- biarkan String nama usus sama 187 00:10:01,590 --> 00:10:05,530 Dan, yang dalam hal ini berarti kita akan menentukan disebut nama konstan. 188 00:10:05,530 --> 00:10:07,150 Ini akan menjadi tipe String. 189 00:10:07,150 --> 00:10:10,550 Dan nilai akan menjadi Dan. 190 00:10:10,550 --> 00:10:12,550 Sekarang cara lain yang kita dapat membuat variables-- 191 00:10:12,550 --> 00:10:15,549 dan ini adalah variabel bisa berubah, yang berarti bahwa kita, pada kenyataannya, akan 192 00:10:15,549 --> 00:10:19,670 untuk mengubah isinya kadang-kadang dalam durasi konteks 193 00:10:19,670 --> 00:10:23,890 bahwa variabel yang defined-- kami menggunakan kata kunci var bukannya membiarkan. 194 00:10:23,890 --> 00:10:27,400 Tapi sekali lagi, secara default, kecuali Anda tahu Anda perlu memanipulasi data itu, 195 00:10:27,400 --> 00:10:30,510 mencoba untuk menggunakan membiarkan untuk peningkatan kinerja. 196 00:10:30,510 --> 00:10:33,740 >> Dalam hal ini, saya kemudian bisa tentukan jenis data 197 00:10:33,740 --> 00:10:37,650 yang kita harapkan menjadi bagian dalam variabel baru yang disebut label. 198 00:10:37,650 --> 00:10:38,800 Ini akan menjadi string. 199 00:10:38,800 --> 00:10:43,030 Dan kita akan kemudian menyatukan dua string bersama-sama, string halo, 200 00:10:43,030 --> 00:10:48,070 dan string diwakili oleh variabel, atau lebih tepatnya nama konstan. 201 00:10:48,070 --> 00:10:50,660 >> Jadi ini bagus karena ini agak PHP seperti di kita itu 202 00:10:50,660 --> 00:10:52,250 memiliki sangat mudah penggabungan string. 203 00:10:52,250 --> 00:10:56,350 Kami tidak harus secara otomatis menggunakan apapun manajemen memori 204 00:10:56,350 --> 00:11:00,580 untuk meningkatkan ukuran dan melakukan apapun hal-hal lucu di sana. 205 00:11:00,580 --> 00:11:05,040 Ini bekerja seperti yang kita benar-benar harapkan. 206 00:11:05,040 --> 00:11:09,370 >> Baiklah, pertanyaan tentang hal ini? 207 00:11:09,370 --> 00:11:12,520 >> Sekarang alasan lain yang kita perlu Anda memiliki kemampuan 208 00:11:12,520 --> 00:11:15,490 untuk dapat menentukan apa jenis variabel data 209 00:11:15,490 --> 00:11:18,170 karena kadang-kadang kita tidak ingin menginisialisasi variabel 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 hal ini, katakanlah bahwa saya ingin memulai memasukkan 212 00:11:23,500 --> 00:11:25,040 beberapa nilai menjadi sebuah buku kelas. 213 00:11:25,040 --> 00:11:27,530 Yah aku tahu bahwa salah satu variabel yang saya ingin menjadi 214 00:11:27,530 --> 00:11:30,280 akan menjadi kelas bisa berubah. 215 00:11:30,280 --> 00:11:33,010 Dan kita juga tahu bahwa kita ingin menjadi integer. 216 00:11:33,010 --> 00:11:36,030 Tapi mungkin kita belum memiliki kelas yang tersedia. 217 00:11:36,030 --> 00:11:39,570 >> Dalam Swift, Anda harus mendefinisikan jenis data 218 00:11:39,570 --> 00:11:44,000 yang berhubungan dengan variabel atau biarkan konstan 219 00:11:44,000 --> 00:11:47,840 sebelum Anda benar-benar bisa menggunakan variabel itu. 220 00:11:47,840 --> 00:11:51,170 Karena itu sangat diketik, Anda harus mengasosiasikan tipe 221 00:11:51,170 --> 00:11:52,890 dengan variabel-variabel ini. 222 00:11:52,890 --> 00:11:56,120 >> Jadi dalam hal ini, jika saya sudah tidak benar diinisialisasi pertama dengan beberapa nilai, 223 00:11:56,120 --> 00:12:00,520 maka saya perlu memberitahu Swift apa Saya berharap tipe data menjadi. 224 00:12:00,520 --> 00:12:02,650 Dan itu akan tetap jenis data yang sama 225 00:12:02,650 --> 00:12:05,780 sepanjang sejarah program ini. 226 00:12:05,780 --> 00:12:10,050 >> Sekarang Anda mungkin tergoda sesegera Saya telah menciptakan variabel kelas ini 227 00:12:10,050 --> 00:12:13,530 dan asalkan sebuah integer 100, sekarang jika saya 228 00:12:13,530 --> 00:12:18,540 ingin mencoba untuk menggabungkan string dengan bilangan bulat itu, 229 00:12:18,540 --> 00:12:21,610 mungkin akan tergoda untuk masih menggunakan bahwa operator penggabungan string 230 00:12:21,610 --> 00:12:24,500 seperti yang kita lakukan hanya beberapa baris sebelumnya. 231 00:12:24,500 --> 00:12:26,460 Tapi sayangnya, ini akan benar-benar tidak 232 00:12:26,460 --> 00:12:29,270 bekerja, karena Anda dasarnya melakukan 233 00:12:29,270 --> 00:12:32,380 operasi pada dua jenis yang berbeda. 234 00:12:32,380 --> 00:12:36,856 >> Sekarang ini sangat berbeda dari yang lain bahasa seperti PHP yang benar-benar 235 00:12:36,856 --> 00:12:38,480 bodoh loosey dengan semacam mereka jenis. 236 00:12:38,480 --> 00:12:40,030 Mereka hanya suka, ya, apapun, aku tidak peduli. 237 00:12:40,030 --> 00:12:42,710 Beri aku satu jenis, dan mungkin aku akan melakukan hal yang benar. 238 00:12:42,710 --> 00:12:46,060 >> Dalam hal ini, Swift adalah sangat ketat tentang jenis 239 00:12:46,060 --> 00:12:47,350 bahwa Anda berurusan dengan. 240 00:12:47,350 --> 00:12:50,700 Operator penjumlahan ini atau operator Rangkaian 241 00:12:50,700 --> 00:12:54,400 memiliki dasarnya beberapa mungkin pilihan yang berbeda. 242 00:12:54,400 --> 00:12:56,970 Anda dapat melakukan penjumlahan dengan bilangan bulat, atau Anda 243 00:12:56,970 --> 00:13:00,870 dapat melakukan penggabungan string, dan mungkin beberapa hal lain juga. 244 00:13:00,870 --> 00:13:05,550 Tetapi jika operator yang tidak mengakui apa yang ada di kedua sisi itu, 245 00:13:05,550 --> 00:13:10,452 atau lebih tepatnya kombinasi dari mereka dua jenis, tidak apa itu mengharapkan, 246 00:13:10,452 --> 00:13:11,910 maka itu akan menyebabkan kegagalan. 247 00:13:11,910 --> 00:13:16,690 >> Jadi dalam hal ini, apa artinya untuk memiliki string ditambah integer? 248 00:13:16,690 --> 00:13:18,880 Nah dalam konteks ini, kita mungkin ingin 249 00:13:18,880 --> 00:13:21,990 untuk melakukan operasi string concatenation. 250 00:13:21,990 --> 00:13:26,420 Tapi tentu saja komputer tidak memiliki semacam konteks. 251 00:13:26,420 --> 00:13:29,950 Dan jadi kita perlu memberikan bahwa informasi tambahan 252 00:13:29,950 --> 00:13:32,390 untuk membiarkannya tahu apa itu adalah yang ingin kita lakukan. 253 00:13:32,390 --> 00:13:36,860 >> Jadi dengan kata lain, fakta bahwa Swift sangat diketik 254 00:13:36,860 --> 00:13:39,520 berarti Anda harus melakukan sedikit pekerjaan tambahan 255 00:13:39,520 --> 00:13:42,100 untuk mendapatkannya untuk mengoperasikan cara yang Anda inginkan. 256 00:13:42,100 --> 00:13:43,710 Tapi sebagai hasilnya, lebih aman. 257 00:13:43,710 --> 00:13:46,290 Dan sekali Anda telah mengambil memperhitungkan jenis-jenis, 258 00:13:46,290 --> 00:13:49,300 hal hanya terus terang mulai bekerja dengan baik. 259 00:13:49,300 --> 00:13:52,520 >> Jadi dalam hal ini, kita kemudian akan melakukan penggabungan string 260 00:13:52,520 --> 00:13:56,040 dengan secara eksplisit pengecoran integer ke string 261 00:13:56,040 --> 00:13:58,490 dengan membungkusnya dalam modal S String fungsi, 262 00:13:58,490 --> 00:14:03,510 dan kemudian menggunakan penggabungan string operator untuk memodifikasi variabel label kami, 263 00:14:03,510 --> 00:14:06,280 dan kemudian mencetaknya. 264 00:14:06,280 --> 00:14:08,420 >> Sejauh ini bagus? 265 00:14:08,420 --> 00:14:12,020 Baiklah, mari kita lanjutkan. 266 00:14:12,020 --> 00:14:16,300 >> Sekarang ada berbagai data jenis yang bisa kita gunakan di Swift. 267 00:14:16,300 --> 00:14:21,620 Seperti yang telah Anda menjadi terbiasa, kita bisa membuat array bisa berubah. 268 00:14:21,620 --> 00:14:26,140 Dan array hanya dapat berisi jenis tunggal. 269 00:14:26,140 --> 00:14:30,360 >> Jadi dalam hal ini, kita akan membuat sebuah array bisa berubah bilangan bulat, yang 270 00:14:30,360 --> 00:14:34,800 kita akan memanggil nilai, dan kita akan dapat untuk menyimpan bahwa dalam braket persegi ini 271 00:14:34,800 --> 00:14:38,650 Format seperti yang Anda sudah dewasa terbiasa dalam berbagai bahasa lain. 272 00:14:38,650 --> 00:14:41,150 Tapi perhatikan bahwa di sini kami mendefinisikan beberapa hal. 273 00:14:41,150 --> 00:14:45,350 nilai adalah variable-- bisa berubah kita tidak menggunakan let kata kunci. 274 00:14:45,350 --> 00:14:49,620 Jadi itu berarti kita dapat memodifikasi isi array ini. 275 00:14:49,620 --> 00:14:53,420 Ini adalah tipe Array Int, dan kita bisa mengatakan bahwa 276 00:14:53,420 --> 00:14:56,260 berdasarkan ini kurung di sini. 277 00:14:56,260 --> 00:14:58,930 >> Sekarang salah satu hal yang menyenangkan tentang ini adalah bahwa kita 278 00:14:58,930 --> 00:15:02,310 memiliki akses ke banyak informasi tambahan 279 00:15:02,310 --> 00:15:07,110 tentang array hanya menggunakan beberapa titik sederhana notasi. 280 00:15:07,110 --> 00:15:10,500 Jadi misalnya, grades.count memberikan kepada kami 281 00:15:10,500 --> 00:15:14,820 jumlah item yang ada dalam array, yang kemudian kita dapat mengakses cukup 282 00:15:14,820 --> 00:15:19,090 mudah hanya menggunakan yang notasi titik. 283 00:15:19,090 --> 00:15:21,830 >> Jika Anda ingin menambahkan tambahan item untuk array ini, 284 00:15:21,830 --> 00:15:27,220 Anda tidak dapat melakukan gaya PHP di mana Anda hanya secara eksplisit mendefinisikan, 285 00:15:27,220 --> 00:15:30,910 pada indeks tertentu, beberapa nilai Anda ingin menyisipkan. 286 00:15:30,910 --> 00:15:37,210 Sebaliknya, gunakan append yang metode dalam tipe array 287 00:15:37,210 --> 00:15:40,920 untuk menambahkan item, 95, untuk daftar ini. 288 00:15:40,920 --> 00:15:45,990 >> Jadi sekarang array ini memiliki berikut contents-- 100, 0, 90, 85. 289 00:15:45,990 --> 00:15:49,270 Dan sekarang kita sudah ditambahkan 95 itu juga. 290 00:15:49,270 --> 00:15:51,830 >> Ada cara lain kita dapat menambahkan hal-hal. 291 00:15:51,830 --> 00:15:55,030 Anda benar-benar dapat menggunakan operator penjumlahan, 292 00:15:55,030 --> 00:15:59,200 yang akan ditafsirkan sebagai operasi array yang append. 293 00:15:59,200 --> 00:16:04,680 Dan Anda kemudian dapat menambahkan lain array, yang isinya adalah 70 dan 80, 294 00:16:04,680 --> 00:16:05,560 array itu. 295 00:16:05,560 --> 00:16:08,250 Jadi sekarang kita memiliki isi variabel 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 hanya sintaksis kecil yang menyenangkan gula yang Swift memberikan kepada kami. 298 00:16:21,850 --> 00:16:23,850 >> Jadi jika kita ingin menjumlahkan nilai, kami mungkin 299 00:16:23,850 --> 00:16:27,340 akan ingin beralih atas setiap item dalam lingkaran ini. 300 00:16:27,340 --> 00:16:32,150 Dan kita miliki, di Swift, gagasan dari untuk loop seperti yang Anda harapkan. 301 00:16:32,150 --> 00:16:35,350 Tapi cara yang kami mengindikasikan rentang sedikit berbeda. 302 00:16:35,350 --> 00:16:37,790 Jadi dalam hal ini, untuk Singkatnya segala sesuatu, kita akan 303 00:16:37,790 --> 00:16:40,650 akan membuat sementara variabel yang disebut sum agar kita 304 00:16:40,650 --> 00:16:42,580 untuk mempertahankan jumlah ini. 305 00:16:42,580 --> 00:16:44,430 >> Dan perhatikan untuk kami lingkaran konstruksi di sini. 306 00:16:44,430 --> 00:16:46,820 Untuk indeks 0 .. 00:16:51,480 308 00:16:51,480 --> 00:16:57,390 Jadi konstruksi ini, 0 .. 00:17:01,860 mengatakan bahwa kita akan membuat berbagai bilangan bulat dari 0 sampai 310 00:17:01,860 --> 00:17:05,750 untuk tetapi tidak termasuk grades.count. 311 00:17:05,750 --> 00:17:09,577 Jadi ini akan menjadi 0, 1, 2, 3, 4, 5, sampai namun banyak satu 312 00:17:09,577 --> 00:17:10,410 sebelum grades.count. 313 00:17:10,410 --> 00:17:14,160 >> Jadi ini berbeda dari bagaimana kita akan digunakan untuk loop biasanya 314 00:17:14,160 --> 00:17:18,569 di mana Anda akan memiliki beberapa indeks variabel, mengaturnya sama dengan 0 pada awalnya, 315 00:17:18,569 --> 00:17:25,480 dan kemudian mengintegrasikan bahwa sampai beberapa nilai kurang dari jumlah item 316 00:17:25,480 --> 00:17:27,140 dalam array itu. 317 00:17:27,140 --> 00:17:29,820 >> Jadi ada modifikasi untuk ini, sebenarnya, 318 00:17:29,820 --> 00:17:35,010 yang memungkinkan kita untuk dengan mudah mengatur berbagai jenis rentang. 319 00:17:35,010 --> 00:17:40,570 Jika Anda mengubah kisaran ini ke tiga titik, 0 ... grade.count, 320 00:17:40,570 --> 00:17:45,120 ini merupakan kisaran 0 untuk grades.count inklusif, 321 00:17:45,120 --> 00:17:49,260 yang berarti bahwa jumlah itu juga kemudian dimasukkan dalam kisaran tersebut. 322 00:17:49,260 --> 00:17:52,110 >> Tapi ini sangat berguna untuk hal-hal ini dengan tepat, 323 00:17:52,110 --> 00:17:54,590 ketika kita harus melakukan iterasi lebih lingkaran 324 00:17:54,590 --> 00:17:59,630 karena mereka indeks yang nol diindeks, seperti yang kita lihat dalam bahasa lain 325 00:17:59,630 --> 00:18:02,360 demikian juga. 326 00:18:02,360 --> 00:18:05,210 Pertanyaan ini untuk loop? 327 00:18:05,210 --> 00:18:10,660 >> Jadi ada definisi implisit variabel indeks ini, 328 00:18:10,660 --> 00:18:14,350 Nilai yang dimulai pada 0, dan terus pada setiap iterasi loop 329 00:18:14,350 --> 00:18:17,950 meningkat 1 sampai titik yaitu sebesar grades.count, 330 00:18:17,950 --> 00:18:20,380 di mana titik, loop dibatalkan. 331 00:18:20,380 --> 00:18:23,730 >> Perhatikan bahwa dalam string interpolasi sini, 332 00:18:23,730 --> 00:18:26,910 kita benar-benar bisa melakukan beberapa sederhana manipulasi terhadap nilai-nilai. 333 00:18:26,910 --> 00:18:31,230 Jadi indeks ditambah 1 akan benar-benar melakukan penjumlahan nilai yang 334 00:18:31,230 --> 00:18:34,780 karena indeks adalah, dalam hal ini, integer. 335 00:18:34,780 --> 00:18:37,810 Dan pada saat itu, itu akan kemudian dikonversi menjadi string 336 00:18:37,810 --> 00:18:42,230 dan diinterpolasi ke dalam string ini di sini, dan dicetak seperti yang kita harapkan. . 337 00:18:42,230 --> 00:18:44,520 >> Dan hal yang menyenangkan tentang array di sini adalah 338 00:18:44,520 --> 00:18:50,730 bahwa kita juga mampu memiliki nilai mengambil dan nilai-nilai pengaturan 339 00:18:50,730 --> 00:18:54,080 menggunakan notasi braket persegi sebagai yang kami lihat dalam 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 sekarang menghitung jumlah kami semua nilai kami. 342 00:19:01,030 --> 00:19:02,780 Sekarang semacam berikutnya langkah logis akan 343 00:19:02,780 --> 00:19:07,580 untuk melakukan operasi pembagian untuk menemukan keluar rata-rata dari mereka nilai. 344 00:19:07,580 --> 00:19:10,150 Tapi sesuatu yang penting disini yang terjadi yang 345 00:19:10,150 --> 00:19:15,020 adalah bahwa jumlah ini mungkin integer. 346 00:19:15,020 --> 00:19:18,020 Tapi kita harus melakukan beberapa semacam divisi ganda. 347 00:19:18,020 --> 00:19:20,600 Dan ini akan menjadi sangat penting ketika 348 00:19:20,600 --> 00:19:24,140 kita ingin melakukan operasi ini, karena apa yang kita katakan 349 00:19:24,140 --> 00:19:28,430 adalah bahwa kita harus benar-benar melakukan pembagian pada dua ganda. 350 00:19:28,430 --> 00:19:31,370 Dan lagi, karena Swift sangat sangat diketik, 351 00:19:31,370 --> 00:19:36,760 kita harus secara eksplisit mengatur semua item untuk ganda sebelum kita benar-benar 352 00:19:36,760 --> 00:19:38,300 melakukan operasi itu. 353 00:19:38,300 --> 00:19:40,550 >> Jadi dalam rangka bagi kita untuk melakukan pembagian ganda, 354 00:19:40,550 --> 00:19:43,730 itu tidak cukup untuk hanya satu dari barang-barang menjadi ganda. 355 00:19:43,730 --> 00:19:46,400 Keduanya harus menjadi ganda agar cepat 356 00:19:46,400 --> 00:19:50,860 untuk memastikan bahwa ini adalah apa yang ingin kita lakukan. 357 00:19:50,860 --> 00:19:54,360 Jadi kita akan kemudian secara eksplisit typecast jumlah yang telah dihitung di atas kita 358 00:19:54,360 --> 00:19:58,970 dan hitungan nilai untuk ganda, dan kemudian melakukan bahwa operasi dan menyimpan 359 00:19:58,970 --> 00:20:02,390 yang menjadi variabel baru ini, atau lebih tepatnya konstan baru ini disebut-rata, 360 00:20:02,390 --> 00:20:06,810 yang akan memiliki jenis, Anda bayangkan? 361 00:20:06,810 --> 00:20:07,587 Ganda, ya. 362 00:20:07,587 --> 00:20:09,420 Jadi dalam hal ini, kita tidak harus menentukan itu 363 00:20:09,420 --> 00:20:13,450 karena bisa disimpulkan dari operasi apa jenis rata Data 364 00:20:13,450 --> 00:20:14,730 akan. 365 00:20:14,730 --> 00:20:19,025 Dan Swift umumnya cukup baik tentang mampu menyimpulkan jenis. 366 00:20:19,025 --> 00:20:22,116 367 00:20:22,116 --> 00:20:24,200 >> Apakah Anda ingin melihat ini menjalankan, atau aku bisa pindah? 368 00:20:24,200 --> 00:20:25,640 Saya ingin terus. 369 00:20:25,640 --> 00:20:28,130 Pertanyaan pada salah ini? 370 00:20:28,130 --> 00:20:28,630 Besar. 371 00:20:28,630 --> 00:20:31,160 372 00:20:31,160 --> 00:20:35,010 >> Sekarang kita akan mulai untuk mendapatkan fungsi mendefinisikan stuff-- baik, 373 00:20:35,010 --> 00:20:39,090 dan beberapa jenis lainnya yang unik untuk Swift bahwa Anda tidak 374 00:20:39,090 --> 00:20:41,620 dilihat dalam bahasa lain sampai titik ini, 375 00:20:41,620 --> 00:20:46,290 tetapi mereka hadir di lain bahasa yang Anda mungkin menemukan di kemudian hari. 376 00:20:46,290 --> 00:20:48,210 Jadi pertama jika Anda ingin untuk menentukan fungsi, 377 00:20:48,210 --> 00:20:52,170 Anda mendefinisikan dengan kata yang funky fungsi, dan kemudian nama fungsi, 378 00:20:52,170 --> 00:20:56,710 dan kemudian di kurung, argumen bahwa Anda ingin fungsi yang menerima. 379 00:20:56,710 --> 00:21:00,280 Argumen juga harus specify-- generally-- 380 00:21:00,280 --> 00:21:05,010 juga harus menentukan jenis data yang mereka, kecuali mereka dapat disimpulkan. 381 00:21:05,010 --> 00:21:07,500 Dan kita akan melihat bahwa sedikit peringatan hanya sedikit. 382 00:21:07,500 --> 00:21:09,920 >> Jadi dalam hal ini kita memiliki fungsi yang disebut printGradeCount. 383 00:21:09,920 --> 00:21:12,840 Kita akan menerima variable-- atau lebih tepatnya dalam hal ini, 384 00:21:12,840 --> 00:21:14,450 constant-- yang disebut gradebook. 385 00:21:14,450 --> 00:21:18,517 Dan itu akan menjadi ketik array bilangan bulat. 386 00:21:18,517 --> 00:21:20,600 Sekarang ada sesuatu yang benar-benar penting di sini 387 00:21:20,600 --> 00:21:21,849 bahwa saya ingin kau mengerti. 388 00:21:21,849 --> 00:21:27,560 Itulah yang secara default, argumen ini yang masukan untuk fungsi ini 389 00:21:27,560 --> 00:21:34,380 didefinisikan dengan let kata kunci implisit, yang berarti bahwa saya tidak dapat memodifikasi ini 390 00:21:34,380 --> 00:21:39,850 variabel gradebook sini. 391 00:21:39,850 --> 00:21:43,360 Dan itu semacam masuk akal, karena Anda lewat data dalam. 392 00:21:43,360 --> 00:21:45,860 Dan Anda mungkin tidak ingin diubah dari bawah Anda. 393 00:21:45,860 --> 00:21:50,800 Hal ini dimungkinkan untuk secara eksplisit menyebutkan bahwa ini adalah variabel dengan menempatkan 394 00:21:50,800 --> 00:21:52,070 var kata kunci di sini. 395 00:21:52,070 --> 00:21:56,832 Tapi itu gotcha bahwa kita sudah orang melihat telah dilakukan di masa lalu 396 00:21:56,832 --> 00:21:59,790 adalah bahwa mereka menganggap bahwa itu akan menjadi variabel ketika, pada kenyataannya, itu 397 00:21:59,790 --> 00:22:02,640 adalah konstan. 398 00:22:02,640 --> 00:22:07,340 >> Baiklah, jadi di sini kemudian, dalam hal ini, kita tidak menentukan jenis pulang. 399 00:22:07,340 --> 00:22:09,460 Kami akan menunjukkan kepada Anda bagaimana melakukan yang hanya dalam beberapa saat. 400 00:22:09,460 --> 00:22:12,340 Tapi perhatikan bahwa di sini kita memiliki hanya sederhana jika kondisi. 401 00:22:12,340 --> 00:22:14,560 Jika gradebook adalah kosong, yang dalam hal ini 402 00:22:14,560 --> 00:22:19,310 hanya milik bilangan bulat ini array, maka kita mencetak sesuatu. 403 00:22:19,310 --> 00:22:23,100 Kalau tidak kita melakukan sesuatu yang lain. 404 00:22:23,100 --> 00:22:25,000 >> Cukup sederhana sejauh ini saya pikir. 405 00:22:25,000 --> 00:22:27,960 Tapi berhenti saya jika Anda memiliki pertanyaan. 406 00:22:27,960 --> 00:22:33,350 >> Sekarang fungsi ini, rata-rata, juga mengambil beberapa argumen, atau lebih tepatnya satu argumen, 407 00:22:33,350 --> 00:22:37,507 yang merupakan gradebook, dan kali ini akan kembali jenis ganda. 408 00:22:37,507 --> 00:22:39,340 Karena komputasi rata-rata dan itu 409 00:22:39,340 --> 00:22:45,010 akan benar-benar kembali bahwa Rata-rata dihitung dengan garis panggilan. 410 00:22:45,010 --> 00:22:50,070 >> Dalam hal ini, kita tentukan Jenis kembali setelah panah. 411 00:22:50,070 --> 00:22:53,260 Dan ini mungkin merasa agak aneh pada awalnya. 412 00:22:53,260 --> 00:22:55,610 Anda telah tumbuh terbiasa untuk pengaturan pengembalian 413 00:22:55,610 --> 00:22:57,720 ketik sebelum nama fungsi. 414 00:22:57,720 --> 00:23:00,310 Tapi jika Anda berpikir tentang hal ini dalam hal matematika, 415 00:23:00,310 --> 00:23:03,320 seperti ketika Anda memiliki matematika yang mendefinisikan fungsi, 416 00:23:03,320 --> 00:23:06,807 Anda memiliki fungsi dengan beberapa input, dan menghasilkan output. 417 00:23:06,807 --> 00:23:08,890 Dan itulah yang ini seharusnya meniru. 418 00:23:08,890 --> 00:23:12,460 Dan ada beberapa bahasa lain yang memiliki sintaks mirip juga, 419 00:23:12,460 --> 00:23:15,674 tapi mungkin tidak ada yang Anda pernah melihat di CS50. 420 00:23:15,674 --> 00:23:17,090 Tapi masih tidak bingung dengan hal itu. 421 00:23:17,090 --> 00:23:21,650 Panah berarti apa yang sedang terjadi dikembalikan dalam kasus ini. 422 00:23:21,650 --> 00:23:23,650 OK, jadi bagaimana kita akan untuk menghitung rata-rata ini? 423 00:23:23,650 --> 00:23:25,649 Nah, jika gradebook kosong, baik maka kami 424 00:23:25,649 --> 00:23:30,731 akan kembali 0, yang mungkin cara yang masuk akal untuk mengobati ini. 425 00:23:30,731 --> 00:23:32,980 Aku tidak tahu, mari kita datang kembali ke dalam sedikit. 426 00:23:32,980 --> 00:23:34,688 Ini mungkin tidak benar-benar menjadi cara yang wajar 427 00:23:34,688 --> 00:23:38,310 untuk menghitung rata-rata jika kita memiliki gradebook kosong. 428 00:23:38,310 --> 00:23:41,260 >> Maka kita hanya akan melakukan penjumlahan kami. 429 00:23:41,260 --> 00:23:43,900 Perhatikan bahwa di sini kita benar-benar memiliki versi alternatif dari 430 00:23:43,900 --> 00:23:49,190 untuk loop, yang memungkinkan kita untuk beralih lebih setiap satu item dalam array 431 00:23:49,190 --> 00:23:53,630 dan menempatkan setiap elemen menjadi variabel sendiri. 432 00:23:53,630 --> 00:23:56,200 Dengan menentukan untuk kelas di gradebook, apa yang kita katakan 433 00:23:56,200 --> 00:24:00,560 adalah bahwa kita akan secara implisit membuat konstan baru yang disebut 434 00:24:00,560 --> 00:24:05,180 kelas yang akan mewakili setiap item unik dalam gradebook 435 00:24:05,180 --> 00:24:06,769 setiap kali bahwa untuk loop iterates. 436 00:24:06,769 --> 00:24:08,560 Jadi yang pertama kalinya itu dijalankan, kelas akan 437 00:24:08,560 --> 00:24:09,800 menjadi item pertama dalam gradebook. 438 00:24:09,800 --> 00:24:12,300 Kedua kalinya itu akan menjadi Item kedua, seterusnya dan sebagainya 439 00:24:12,300 --> 00:24:15,970 sampai gradebook memiliki habis itu sendiri elemen. 440 00:24:15,970 --> 00:24:20,390 Kemudian kita akan dapat menyimpulkan bahwa kelas ke variabel penjumlahan kami 441 00:24:20,390 --> 00:24:22,570 dan kembali rata-rata kami seperti yang telah kita lihat sebelumnya. 442 00:24:22,570 --> 00:24:25,670 443 00:24:25,670 --> 00:24:26,950 OK, pertanyaan? 444 00:24:26,950 --> 00:24:27,699 Iya nih? 445 00:24:27,699 --> 00:24:28,990 AUDIENCE: Saya punya dua pertanyaan. 446 00:24:28,990 --> 00:24:33,586 Nomor satu, hipotetis, bisa Anda menjalankan bilangan bulat yang satu ini? 447 00:24:33,586 --> 00:24:35,604 Tidak harus menjadi ganda, benar? 448 00:24:35,604 --> 00:24:37,520 DAN AMRMENDARIZ: Dapatkah Anda mengulangi pertanyaan itu? 449 00:24:37,520 --> 00:24:39,587 AUDIENCE: Dapatkah saya lakukan integer sebagai rata-rata? 450 00:24:39,587 --> 00:24:41,670 DAN AMRMENDARIZ: Dapatkah Anda melakukan integer sebagai rata-rata? 451 00:24:41,670 --> 00:24:45,015 Jadi kembali integer rata bukannya ganda? 452 00:24:45,015 --> 00:24:48,204 >> AUDIENCE: Return-- Anda memiliki itu 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 AUDIENCE: Ya, hanya kembali 0. 455 00:24:51,790 --> 00:24:56,590 Sehingga akan baik 80 atau 85, tetapi tidak 85,2. 456 00:24:56,590 --> 00:24:59,465 >> DAN AMRMENDARIZ: Jadi dalam hal ini, jadi ada beberapa cara yang berbeda 457 00:24:59,465 --> 00:25:00,090 untuk menjawab itu. 458 00:25:00,090 --> 00:25:02,760 Biarkan saya jawab mereka dalam rangka. 459 00:25:02,760 --> 00:25:06,740 Jadi jika saya hanya membuat kembali ini 0, 0 adalah nilai integer. 460 00:25:06,740 --> 00:25:09,730 Dan sehingga akan menyebabkan Jenis kesalahan untuk kasus ini 461 00:25:09,730 --> 00:25:13,210 karena mengharapkan ganda tapi kemudian kembali integer. 462 00:25:13,210 --> 00:25:16,770 Jika saya ingin kembali integer, saya bisa. 463 00:25:16,770 --> 00:25:20,450 Saya bisa mengatur jenis kembali int, return 0 sini, 464 00:25:20,450 --> 00:25:22,047 dan tidak melakukan pembagian ganda. 465 00:25:22,047 --> 00:25:23,880 Tapi kemudian kita akan melakukan pembagian integer. 466 00:25:23,880 --> 00:25:27,080 Dan jadi kita kemudian tidak akan mendapatkan rata-rata yang kita mungkin harapkan. 467 00:25:27,080 --> 00:25:29,210 Tapi ya kita bisa memodifikasi jenis dengan cara itu. 468 00:25:29,210 --> 00:25:32,598 >> AUDIENCE: Dan kedua, Anda memiliki satu ganda di atas. 469 00:25:32,598 --> 00:25:35,502 Tapi di bawah, ketika Anda lakukan kembali ganda ganda, 470 00:25:35,502 --> 00:25:38,280 yang sudah otomatis kembali format yang ganda. 471 00:25:38,280 --> 00:25:42,278 Mengapa Anda masih perlu mendefinisikannya dengan panah di atas dengan ganda? 472 00:25:42,278 --> 00:25:45,010 >> DAN AMRMENDARIZ: Jadi dalam hal, ini adalah bagian 473 00:25:45,010 --> 00:25:50,580 dari the-- sehingga untuk mengulang pertanyaan, karena itu tersirat dari pengembalian 474 00:25:50,580 --> 00:25:56,030 sebenarnya jenis di sini, apa jenis ini adalah, kita harus eksplisit dengan Swift 475 00:25:56,030 --> 00:25:59,970 tentang apa yang kita ingin kembali dari fungsi ini 476 00:25:59,970 --> 00:26:02,690 sehingga ketika ia melakukan mengetik memeriksa, itu dapat memastikan 477 00:26:02,690 --> 00:26:05,850 bahwa apa yang kita telah benar-benar ditulis di bawah benar-benar sesuai dengan yang. 478 00:26:05,850 --> 00:26:10,225 Jadi itu semacam cek dengan diri sendiri semacam situasi. 479 00:26:10,225 --> 00:26:11,050 Tapi ada are-- 480 00:26:11,050 --> 00:26:12,560 >> AUDIENCE: [tidak terdengar] panah? 481 00:26:12,560 --> 00:26:19,490 >> DAN AMRMENDARIZ: Ada kasus ketika kita dapat menentukan bahwa kita bisa secara implisit 482 00:26:19,490 --> 00:26:21,550 mengatur jenis kembali. 483 00:26:21,550 --> 00:26:23,940 Tapi dalam kasus ini, saya tidak berpikir bahwa akan bekerja. 484 00:26:23,940 --> 00:26:26,190 Ada beberapa sintaks lainnya bahwa 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 kode adalah sedikit berbeda 487 00:26:35,280 --> 00:26:41,839 karena ini mem-parsing argumen dari fungsi yang kita panggil. 488 00:26:41,839 --> 00:26:44,130 Mari saya tunjukkan cara kerjanya sebelum kita benar-benar pindah 489 00:26:44,130 --> 00:26:48,050 untuk beberapa hal menarik yang terjadi di Swift. 490 00:26:48,050 --> 00:26:51,870 >> Jadi dalam hal ini, jika saya hanya menjalankan ini kode, perhatikan bahwa apa yang dilakukannya 491 00:26:51,870 --> 00:26:54,900 is-- sementara, itu jenis memberi saya kesalahan aneh. 492 00:26:54,900 --> 00:26:59,730 Saya harus lulus itu beberapa bilangan bulat sebagai argumen baris perintah. 493 00:26:59,730 --> 00:27:06,220 Jadi mari kita lihat, 150 dan 80, dan tekan Enter untuk mencari tahu apa itu benar-benar melakukan. 494 00:27:06,220 --> 00:27:09,890 Ini menerima masing-masing nilai-nilai ini sebagai bilangan bulat. 495 00:27:09,890 --> 00:27:12,040 Ini memasukkan mereka ke dalam gradebook a. 496 00:27:12,040 --> 00:27:14,470 Dan kemudian itu melakukan bahwa perhitungan rata-rata 497 00:27:14,470 --> 00:27:16,650 dan keluaran yang seperti yang kita harapkan. 498 00:27:16,650 --> 00:27:19,950 >> Tapi jelas ada sesuatu yang terjadi pada dengan sesuatu menolak ini 499 00:27:19,950 --> 00:27:23,300 sesuatu yang integer. 500 00:27:23,300 --> 00:27:27,300 Seperti yang mungkin Anda ingat dari ketika kami berurusan dengan argumen baris perintah 501 00:27:27,300 --> 00:27:32,640 di C dan bahasa lain, pertama Item 0-th dalam argumen baris perintah 502 00:27:32,640 --> 00:27:35,774 daftar adalah nama dari perintah bahwa kita benar-benar dieksekusi. 503 00:27:35,774 --> 00:27:38,690 Jadi dalam hal ini, aku hanya perulangan atas semua argumen baris perintah. 504 00:27:38,690 --> 00:27:41,650 Tapi aku tidak melakukan apapun mewah periksa untuk melewatkan yang pertama. 505 00:27:41,650 --> 00:27:45,920 Aku hanya eksplisit atau implisit Saya memeriksa yang jenis ini 506 00:27:45,920 --> 00:27:49,900 adalah bilangan bulat sebelum aku benar-benar melakukan perhitungan ini. 507 00:27:49,900 --> 00:27:52,420 >> Dan itu dasarnya apa yang terjadi di sini. 508 00:27:52,420 --> 00:27:55,860 Untuk setiap argumen di argumen proses ini, 509 00:27:55,860 --> 00:27:59,210 Aku akan melakukan beberapa pemeriksaan. 510 00:27:59,210 --> 00:28:01,970 Dan dalam hal ini, saya akan mencoba untuk mengkonversi pertama 511 00:28:01,970 --> 00:28:07,620 bahwa argumen menjadi integer oleh melakukan sebuah typecast eksplisit, 512 00:28:07,620 --> 00:28:12,310 karena, pada input, string dan tidak pada kenyataannya integer. 513 00:28:12,310 --> 00:28:18,140 >> Tapi ini adalah jenis sintaks aneh, jika membiarkan kelas sama Int (argumen). 514 00:28:18,140 --> 00:28:21,120 Apa yang sebenarnya terjadi sini sangat 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 disebut tipe opsional. 517 00:28:27,610 --> 00:28:34,790 >> Jadi fungsi ini, Int (argumen), mengembalikan bukan hanya integer, tapi kembali 518 00:28:34,790 --> 00:28:37,470 apa yang disebut integer opsional. 519 00:28:37,470 --> 00:28:41,200 Dan jadi ini adalah semacam jenis di atas tipe. 520 00:28:41,200 --> 00:28:45,900 Anda dapat semacam membayangkannya seperti itu kembali seperti paket. 521 00:28:45,900 --> 00:28:47,750 Dan ketika Anda membuka bahwa paket, itu baik 522 00:28:47,750 --> 00:28:53,930 memiliki integer, yang hasilnya, atau itu sama sekali tidak ada di dalamnya sama sekali. 523 00:28:53,930 --> 00:28:58,140 Dan ini berguna sebagai pemeriksaan kesalahan mekanisme, karena dalam kasus ini 524 00:28:58,140 --> 00:29:02,080 kita dapat mengetahui, apakah ini jenis konversi sukses? 525 00:29:02,080 --> 00:29:05,810 Jika itu, maka itu sebenarnya akan memiliki integer dalam. 526 00:29:05,810 --> 00:29:08,750 Jika tidak itu akan memiliki beberapa nilai yang akan kita sebut nihil, yang 527 00:29:08,750 --> 00:29:10,920 merupakan perwakilan dari tidak ada bilangan bulat sama sekali. 528 00:29:10,920 --> 00:29:13,270 Ini benar-benar mewakili apa-apa. 529 00:29:13,270 --> 00:29:18,130 >> Dan jadi ini jika konstruksi memungkinkan kita untuk membuka bungkusan paket itu, 530 00:29:18,130 --> 00:29:19,850 yang opsional mengikat. 531 00:29:19,850 --> 00:29:25,560 Dan jika kita mampu membukanya bahwa paket dan menemukan integer dalam, 532 00:29:25,560 --> 00:29:27,720 maka apa yang kita katakan di sini adalah bahwa kita kemudian akan 533 00:29:27,720 --> 00:29:33,090 memungkinkan nilai yang harus ditetapkan dalam konstan ini disebut kelas. 534 00:29:33,090 --> 00:29:36,590 Dan ini bagian dari jika pernyataan, bagian atas jika pernyataan 535 00:29:36,590 --> 00:29:40,390 akan berjalan, karena itu unwrap berhasil. 536 00:29:40,390 --> 00:29:43,290 >> Jika kebetulan yang ada kesalahan mungkin 537 00:29:43,290 --> 00:29:47,040 dalam jenis konversi eksplisit ini dari string ke integer, mungkin 538 00:29:47,040 --> 00:29:49,160 itu nilai ABC misalnya. 539 00:29:49,160 --> 00:29:52,120 Dan itu benar-benar tidak akan untuk mengkonversi ke integer. 540 00:29:52,120 --> 00:29:55,520 Maka akan kembali nihil, yang bukan merupakan bilangan bulat. 541 00:29:55,520 --> 00:29:57,570 Dan ini jika pernyataan juga kemudian gagal. 542 00:29:57,570 --> 00:30:01,930 kelas tidak akan ada karena tidak memiliki konten integer. 543 00:30:01,930 --> 00:30:06,391 Dan itu akan berjalan ini pun blok sebagai gantinya. 544 00:30:06,391 --> 00:30:06,890 Iya nih? 545 00:30:06,890 --> 00:30:09,652 >> AUDIENCE: Nil adalah N-I-L? 546 00:30:09,652 --> 00:30:11,110 DAN AMRMENDARIZ: nil adalah N-I-L, ya. 547 00:30:11,110 --> 00:30:14,970 548 00:30:14,970 --> 00:30:20,310 >> Jadi ini mungkin salah satu hal yang paling sulit tentang Swift, 549 00:30:20,310 --> 00:30:23,690 terutama ketika Anda berada di gulma pada sebuah aplikasi iOS 550 00:30:23,690 --> 00:30:27,442 dan Anda benar-benar mencoba untuk melakukan beberapa pengembangan di sana. 551 00:30:27,442 --> 00:30:29,400 Ini akan berteriak pada Anda tentang opsional. 552 00:30:29,400 --> 00:30:33,050 Ini akan meminta Anda untuk tanda tanya dan tanda seru. 553 00:30:33,050 --> 00:30:37,100 Tapi setelah Anda mengetahui out-- jika Anda mencurahkan waktu untuk mencari tahu 554 00:30:37,100 --> 00:30:41,990 apa yang terjadi dengan jenis opsional, Anda akan menghemat banyak sakit kepala 555 00:30:41,990 --> 00:30:46,040 Anda mencoba untuk menulis sebuah aplikasi di Swift. 556 00:30:46,040 --> 00:30:47,660 >> Ini sebenarnya fitur yang sangat kuat. 557 00:30:47,660 --> 00:30:49,826 Dan Anda hanya harus mengambil kata-kata saya untuk itu untuk saat ini. 558 00:30:49,826 --> 00:30:52,620 Tapi kita akan melihat konstruksi ini dan beberapa orang lain seperti itu 559 00:30:52,620 --> 00:30:56,740 di beberapa kode sumber lain yang kami akan menunjukkan hanya sedikit. 560 00:30:56,740 --> 00:31:00,440 >> Apakah ada pertanyaan awal di sini? 561 00:31:00,440 --> 00:31:03,790 562 00:31:03,790 --> 00:31:08,690 Jadi takeaway penting adalah bahwa Jenis opsional adalah semacam metatype a. 563 00:31:08,690 --> 00:31:12,500 Itu baik memiliki nilai, dan jika tidak, maka 564 00:31:12,500 --> 00:31:18,110 mungkin akan memiliki nilai yang terkait dengan itu, atau tidak memiliki nilai apapun, 565 00:31:18,110 --> 00:31:19,620 dan diwakili oleh nihil. 566 00:31:19,620 --> 00:31:24,210 567 00:31:24,210 --> 00:31:28,870 Sisa ini mungkin seperti yang Anda harapkan. 568 00:31:28,870 --> 00:31:32,900 >> Jadi mari kita jalan sampai kesulitan lagi. 569 00:31:32,900 --> 00:31:37,070 Dan kali ini, mari kita lihat beberapa tipe data lain yang benar-benar ada. 570 00:31:37,070 --> 00:31:41,290 Salah satunya adalah kamus, yang merupakan sangat mirip dengan Python kamus. 571 00:31:41,290 --> 00:31:48,270 Ini agak mirip dengan tabel hash di C. Ini pada dasarnya adalah pemetaan kunci 572 00:31:48,270 --> 00:31:49,820 di mana kunci dapat string. 573 00:31:49,820 --> 00:31:52,670 Dan ketika Anda melihat orang-orang kunci, kunci-kunci akan memiliki nilai. 574 00:31:52,670 --> 00:31:56,020 Sehingga tidak cukup array yang itu, tapi sebaliknya, terkait lebih erat 575 00:31:56,020 --> 00:31:58,810 untuk peta hash atau tabel hash. 576 00:31:58,810 --> 00:32:02,420 >> Mari kita lihat bagaimana hal ini seharusnya bekerja sebelum kita benar-benar 577 00:32:02,420 --> 00:32:05,210 masuk ke kode sumber itu sendiri. 578 00:32:05,210 --> 00:32:07,680 Jika saya hanya menjalankan ini, tidak benar-benar terjadi. 579 00:32:07,680 --> 00:32:12,430 Ini memberitahu saya bahwa saya mengharapkan beberapa parameter dari jenis berikut. 580 00:32:12,430 --> 00:32:16,050 Jadi aku akan memberikan kepada itu beberapa nama masalah set, 581 00:32:16,050 --> 00:32:18,490 sehingga pset0, mungkin aku punya 100. 582 00:32:18,490 --> 00:32:20,790 Dan pset1, aku punya 5. 583 00:32:20,790 --> 00:32:24,630 Dan kemudian pada ujian, saya melakukan dengan sangat baik dan mendapat 30. 584 00:32:24,630 --> 00:32:27,180 Dan oops, aku memukul spasi di sini. 585 00:32:27,180 --> 00:32:30,940 >> Ketika saya tekan Enter, Anda dapat melihat ia melakukan beberapa perhitungan. 586 00:32:30,940 --> 00:32:33,740 Dikatakan gradebook tiga nilai, pset1, pset0, ujian. 587 00:32:33,740 --> 00:32:36,120 Dan gradebook memiliki Rata-rata tertentu. 588 00:32:36,120 --> 00:32:38,370 Jadi sekali lagi, kami bekerja dengan ide gradebook ini, 589 00:32:38,370 --> 00:32:44,650 tapi kami akan terus iterasi dengan kompleksitas fungsi kita. 590 00:32:44,650 --> 00:32:47,650 >> Jadi di awal, kami hanya akan membuat fungsi yang 591 00:32:47,650 --> 00:32:49,390 bertanggung jawab untuk mencetak penggunaan. 592 00:32:49,390 --> 00:32:51,920 Dan ada keluar ini fungsi yang hanya akan 593 00:32:51,920 --> 00:32:53,710 paksa keluar dari aplikasi. 594 00:32:53,710 --> 00:32:56,530 Ini bukan sesuatu yang Anda akan gunakan dalam aplikasi iOS. 595 00:32:56,530 --> 00:32:59,750 Ini hanya, dalam kasus ini, dengan argumen baris perintah. 596 00:32:59,750 --> 00:33:01,990 Berikutnya kita akan mulai bergerak menuju Xcode. 597 00:33:01,990 --> 00:33:07,760 Tapi ini khusus untuk perintah Program gaya garis di Swift. 598 00:33:07,760 --> 00:33:11,490 >> Mari kita lihat beberapa hal-hal yang menarik di sini. 599 00:33:11,490 --> 00:33:15,150 Mari kita lihat, hanya beberapa hal menarik lagi mungkin 600 00:33:15,150 --> 00:33:19,930 adalah bahwa dalam fungsi saya mencetak jumlah nilai, 601 00:33:19,930 --> 00:33:26,090 Anda mungkin ingat bahwa saya punya daftar yang dari pset1 items--, pset0, dan ujian. 602 00:33:26,090 --> 00:33:29,130 Anda dapat benar-benar cepat dan dengan mudah melakukan ini 603 00:33:29,130 --> 00:33:34,490 dengan mengambil gradebook, yang merupakan kamus yang memiliki kunci dan nilai-nilai. 604 00:33:34,490 --> 00:33:38,730 Cari semua kuncinya adalah melalui metode dot kunci di sini, 605 00:33:38,730 --> 00:33:43,180 dan kemudian menggunakan joinWithSeparator ini, yang kemudian akan mengambil semua tombol 606 00:33:43,180 --> 00:33:48,590 bahwa kita telah mengetik, pset1-- atau Maaf, pset0, pset1, dan exam-- 607 00:33:48,590 --> 00:33:53,030 dan menggabungkan mereka bersama-sama menggunakan koma dan spasi 608 00:33:53,030 --> 00:33:55,400 untuk membuat satu string panjang. 609 00:33:55,400 --> 00:34:00,190 Bergabung dengan operasi ini hanya fenomenal berguna dalam berbagai konteks. 610 00:34:00,190 --> 00:34:03,450 Dan sehingga joinWithSeparator ini. 611 00:34:03,450 --> 00:34:06,939 >> Dan ini adalah salah satu hal yang berubah dari Swift 1 ke Swift 2. 612 00:34:06,939 --> 00:34:08,730 Ada digunakan untuk menjadi Python style-- jika Anda 613 00:34:08,730 --> 00:34:13,219 akrab dengan Python-- Python sebuah Gaya bergabung metode pada string. 614 00:34:13,219 --> 00:34:15,699 Tapi itu tidak lagi kasus di Swift 2. 615 00:34:15,699 --> 00:34:19,400 Anda ingin menggunakan ini jika Anda ingin untuk menggabungkan array barang 616 00:34:19,400 --> 00:34:23,380 bersama-sama dengan string. 617 00:34:23,380 --> 00:34:27,889 >> Jadi mungkin kemudian di kami pembahasan rata-rata sebelum, 618 00:34:27,889 --> 00:34:32,659 itu membuat sedikit lebih masuk akal bagi kita untuk mengatur fungsi-rata 619 00:34:32,659 --> 00:34:36,610 menjadi opsional ganda lebih dari sekedar ganda eksplisit. 620 00:34:36,610 --> 00:34:39,239 Karena kami memiliki yang kondisi yang tidak biasa di mana, 621 00:34:39,239 --> 00:34:41,550 bagaimana jika gradebook sebenarnya tidak memiliki nilai-nilai di dalamnya? 622 00:34:41,550 --> 00:34:44,280 Apa yang harus pengembalian rata-rata? 623 00:34:44,280 --> 00:34:46,350 >> Yah mungkin di C Anda akan melakukan sesuatu 624 00:34:46,350 --> 00:34:50,040 seperti memberikan nilai sentinel, seperti 0,0, atau mungkin angka negatif, 625 00:34:50,040 --> 00:34:53,690 atau sesuatu hanya mewakili kenyataan bahwa ada beberapa kondisi kesalahan 626 00:34:53,690 --> 00:34:57,910 dan Anda mungkin tidak benar-benar memiliki kemampuan untuk menghitung rata-rata itu. 627 00:34:57,910 --> 00:35:05,590 Nah keindahan menentukan sebuah Jenis opsional akan melakukan itu. 628 00:35:05,590 --> 00:35:09,540 Dan aku sekarang mengatakan semua kata-kata ini, tapi ini benar-benar tidak menggunakan optionals. 629 00:35:09,540 --> 00:35:12,970 Tapi kita akan melihat bahwa hanya menit di mana kita dapat mengatur rata 630 00:35:12,970 --> 00:35:17,230 menjadi tipe data opsional sehingga jika itu benar-benar kembali beberapa data, kemudian 631 00:35:17,230 --> 00:35:18,470 kami akan kembali data tersebut. 632 00:35:18,470 --> 00:35:20,570 Kalau tidak kita akan kembali nihil, mengatakan bahwa ini 633 00:35:20,570 --> 00:35:22,200 tidak memiliki perhitungan yang berarti. 634 00:35:22,200 --> 00:35:25,650 635 00:35:25,650 --> 00:35:28,570 >> Mari kita beralih ke sesuatu yang lain. 636 00:35:28,570 --> 00:35:35,910 Jadi dari sini, kami sudah melihat semua contoh ini di baris perintah. 637 00:35:35,910 --> 00:35:39,470 Tapi benar-benar apa yang akan Anda harus berurusan dengan adalah Xcode. 638 00:35:39,470 --> 00:35:43,720 Dan salah satu hal yang menyenangkan tentang Xcode adalah, dan khususnya di Swift, 639 00:35:43,720 --> 00:35:47,450 adalah bahwa kita memiliki ini Hal yang disebut Playground. 640 00:35:47,450 --> 00:35:51,470 Dan Playground adalah tidak sama sekali sebuah aplikasi iOS. 641 00:35:51,470 --> 00:35:54,751 Tetapi memungkinkan Anda untuk bereksperimen dengan Swift dalam cara yang sangat mudah. 642 00:35:54,751 --> 00:35:56,000 Anda dapat mengetik semua kode Anda. 643 00:35:56,000 --> 00:35:58,140 Ini baik sintaks disorot di sini. 644 00:35:58,140 --> 00:36:01,600 Bila Anda membuat file baru, ia akan meminta Anda jika Anda ingin membuat sebuah Playground. 645 00:36:01,600 --> 00:36:08,720 Tapi hal yang baik tentang Playground adalah bahwa di sebelah kanan jendela, 646 00:36:08,720 --> 00:36:12,020 apakah itu benar-benar menunjukkan Anda Output dari kode Anda. 647 00:36:12,020 --> 00:36:16,110 Jadi jika saya gulir ke bawah, kita bisa melihat apa yang output dari berbagai baris kode 648 00:36:16,110 --> 00:36:17,200 sebenarnya terjadi menjadi. 649 00:36:17,200 --> 00:36:19,850 650 00:36:19,850 --> 00:36:26,790 >> Jadi dalam hal ini, kita akan mengubah arah hanya sedikit 651 00:36:26,790 --> 00:36:30,960 dan berbicara tentang sesuatu yang benar-benar penting untuk ini cara tingkat tinggi 652 00:36:30,960 --> 00:36:34,020 bahwa Swift beroperasi, dan itu adalah ide ini penutupan. 653 00:36:34,020 --> 00:36:36,960 Dan Anda mungkin pernah melihat ini sedikit di JavaScript. 654 00:36:36,960 --> 00:36:40,770 Bagi Anda yang berada di CS50, penutupan 655 00:36:40,770 --> 00:36:47,240 sangat populer, cara yang sangat baik untuk melakukan hal tingkat tinggi dalam bahasa modern. 656 00:36:47,240 --> 00:36:50,270 Tapi itu juga agak sulit untuk membungkus kepala Anda sekitar pertama kalinya. 657 00:36:50,270 --> 00:36:52,269 Jadi jika Anda melihat ini pertama kalinya, itu OK. 658 00:36:52,269 --> 00:36:56,740 Hanya melihat kode sumber dan melihat jika Anda dapat mencari tahu di rumah. 659 00:36:56,740 --> 00:37:01,050 >> Jadi dalam hal ini, mari kita mengatakan bahwa kita ingin membuat banyak eksponen 660 00:37:01,050 --> 00:37:04,134 dengan beberapa nilai tetap. 661 00:37:04,134 --> 00:37:05,800 Jadi dalam hal ini saya bisa membuat fungsi. 662 00:37:05,800 --> 00:37:09,270 Aku akan menyebutnya kekuatan 2 tujuan yang satu-satunya dalam hidup 663 00:37:09,270 --> 00:37:15,770 adalah untuk mengambil beberapa masukan dan double itu, dan mengembalikan nilai itu. 664 00:37:15,770 --> 00:37:21,210 Perhatikan bahwa di sini saya menerima satu jenis data. 665 00:37:21,210 --> 00:37:23,137 Ini akan menjadi variabel yang disebut x. 666 00:37:23,137 --> 00:37:23,970 Ini tipe ganda. 667 00:37:23,970 --> 00:37:26,190 Dan aku akan kembali Double sini. 668 00:37:26,190 --> 00:37:29,100 Dan aku hanya akan melakukan sangat, terus terang, cukup 669 00:37:29,100 --> 00:37:32,650 cara naif menggandakan nilai ini. 670 00:37:32,650 --> 00:37:35,600 Dan aku akan menunjukkan mengapa ini berguna hanya dalam satu detik. 671 00:37:35,600 --> 00:37:40,418 >> Perhatikan bahwa di sini kita memiliki kisaran ini lagi. sesuatu di 1, dot 672 00:37:40,418 --> 00:37:44,130 dot dot, 2, yang berarti bahwa lingkaran ini akan berjalan dua kali. 673 00:37:44,130 --> 00:37:46,480 Tapi ini merupakan variabel dummy. 674 00:37:46,480 --> 00:37:49,650 Itu berarti aku tidak benar-benar akan menggunakan variabel yang mana saja 675 00:37:49,650 --> 00:37:51,070 dalam lingkaran ini. 676 00:37:51,070 --> 00:37:55,380 Aku hanya ingin baris ini kode untuk menjalankan dua kali, 677 00:37:55,380 --> 00:37:58,980 tanpa perlu tahu nilai kisaran tersebut. 678 00:37:58,980 --> 00:38:02,570 >> Jadi dalam hal ini saya sedang menjalankan hasil kali x dua kali, yang pada dasarnya 679 00:38:02,570 --> 00:38:06,560 berarti bahwa aku mengkuadratkan nilai ini. 680 00:38:06,560 --> 00:38:10,230 Dan ini terjadi pada bekerja seperti yang kita harapkan. 681 00:38:10,230 --> 00:38:16,410 Kekuatan 2, melewati nilai 2.0 memberi kita output 4. 682 00:38:16,410 --> 00:38:18,810 3.2 bekerja untuk 10,24. 683 00:38:18,810 --> 00:38:22,660 >> Sekarang kita bisa melakukan yang sama Hal untuk kekuatan 3. 684 00:38:22,660 --> 00:38:25,330 Tapi sekarang berubah hanya jangkauan. 685 00:38:25,330 --> 00:38:28,840 Untuk variabel dummy dalam 1 melalui 3, kalikan 3 kali, 686 00:38:28,840 --> 00:38:29,830 dan melakukan hal yang sama. 687 00:38:29,830 --> 00:38:32,240 >> Jadi ini mungkin merasa sedikit dibikin. 688 00:38:32,240 --> 00:38:34,270 Tapi ada yang penting hal di sini yang 689 00:38:34,270 --> 00:38:37,770 adalah bahwa melihat ini dua fungsi, ada 690 00:38:37,770 --> 00:38:43,600 hanya satu hal yang berbeda, yang merupakan nilai ini dalam kisaran. 691 00:38:43,600 --> 00:38:46,910 Segala sesuatu tentang kedua fungsi, kekuatan 3 dan kekuatan 2, 692 00:38:46,910 --> 00:38:50,440 , pada kenyataannya, identik karena mereka bekerja dengan cara yang sama. 693 00:38:50,440 --> 00:38:53,460 >> Jadi pada titik ini, sedikit bel alarm harus pergi. 694 00:38:53,460 --> 00:38:56,200 Mudah-mudahan apa yang Anda katakan, Anda tahu, ini terasa sedikit 695 00:38:56,200 --> 00:38:59,250 seperti duplikasi usaha. 696 00:38:59,250 --> 00:39:02,950 Mungkin ada cara yang saya akan dapat merangkum semua ini 697 00:39:02,950 --> 00:39:06,630 dan memberikan fungsi atau membuat fungsi yang 698 00:39:06,630 --> 00:39:11,550 tidak persis apa yang saya inginkan tanpa perlu mengetik secara eksplisit. 699 00:39:11,550 --> 00:39:15,732 Dan ini adalah apa daya dari penutupan memungkinkan kita untuk melakukan. 700 00:39:15,732 --> 00:39:16,940 Jadi mari kita lihat ini. 701 00:39:16,940 --> 00:39:18,700 Dan aku akan menghabiskan beberapa menit ini, karena ini 702 00:39:18,700 --> 00:39:20,310 cukup penting bagi Swift. 703 00:39:20,310 --> 00:39:22,900 Kita melihat ini sepanjang waktu. 704 00:39:22,900 --> 00:39:24,550 Kita akan mendefinisikan fungsi. 705 00:39:24,550 --> 00:39:26,380 Ini akan disebut powerOf. 706 00:39:26,380 --> 00:39:29,470 Ini akan menerima parameter yang disebut y tipe Int. 707 00:39:29,470 --> 00:39:32,220 Tapi lihatlah jenis kembali. 708 00:39:32,220 --> 00:39:38,730 Jenis kembali adalah, dalam kurung, Double panah ganda. 709 00:39:38,730 --> 00:39:43,370 Yang berarti bahwa fungsi ini, fungsi powerOf ini, 710 00:39:43,370 --> 00:39:46,550 adalah kembali fungsi. 711 00:39:46,550 --> 00:39:50,845 Yang menerima Double dan mengembalikan ganda. 712 00:39:50,845 --> 00:39:53,720 Sehingga mungkin terdengar agak gila, tapi mari kita scroll ke bawah sedikit 713 00:39:53,720 --> 00:39:55,060 dan melihat untuk melihat apa yang terjadi. 714 00:39:55,060 --> 00:39:57,910 Kami berada di dalam fungsi powerOf ini. 715 00:39:57,910 --> 00:40:00,760 Kami menciptakan fungsi baru disebut exponentiator, 716 00:40:00,760 --> 00:40:02,900 tetapi tidak peduli apa itu. 717 00:40:02,900 --> 00:40:06,410 >> Perhatikan bahwa ini memiliki nilai input x. 718 00:40:06,410 --> 00:40:09,910 Dan itu adalah mengambil dalam dua dan mengembalikan ganda. 719 00:40:09,910 --> 00:40:16,320 Dan ini adalah kode yang sama bahwa kita lihat di atas, kecuali bahwa nilai 2 720 00:40:16,320 --> 00:40:20,060 atau nilai 3, yang atas terikat di kisaran itu, 721 00:40:20,060 --> 00:40:23,210 telah diganti dengan Nilai ini y, yang 722 00:40:23,210 --> 00:40:27,230 adalah parameter awal fungsi powerOf kami. 723 00:40:27,230 --> 00:40:31,700 Dan pada titik 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 >> Ini semacam seperti pikiran bertiup sedikit. 727 00:40:39,550 --> 00:40:44,360 Tapi mari kita bayangkan apa yang terjadi ketika saya memanggil fungsi ini powerOf 728 00:40:44,360 --> 00:40:47,610 dan lulus ke dalamnya beberapa nilai seperti 2. 729 00:40:47,610 --> 00:40:50,020 Apakah ini berarti bahwa Saya sekarang memiliki nilai 730 00:40:50,020 --> 00:40:55,130 2 untuk y, yang berarti bahwa 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 Tapi aku kembali ini fungsi exponentiator. 733 00:41:01,290 --> 00:41:05,900 >> Jadi perhatikan apa Swift bilang aku telah dibuat dalam hal ini. 734 00:41:05,900 --> 00:41:10,550 biarkan persegi definisi, itu fungsi yang menerima dua 735 00:41:10,550 --> 00:41:12,610 dan mengembalikan ganda. 736 00:41:12,610 --> 00:41:16,590 Saya telah menciptakan sebuah fungsi bahwa kotak 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 terjadi adalah bahwa itu kembali fungsi ini 739 00:41:22,490 --> 00:41:26,390 exponentiator, tetapi nilai ini y dibungkus di dalamnya. 740 00:41:26,390 --> 00:41:31,080 Dan jadi sekarang setiap kali saya menggunakan ini variabel atau konstanta ini disebut 741 00:41:31,080 --> 00:41:35,180 persegi, itu akan berperilaku sebagai fungsi. 742 00:41:35,180 --> 00:41:39,960 Dan jadi saya kemudian dapat memanggil variabel yang seperti aku akan memanggil fungsi, 743 00:41:39,960 --> 00:41:43,830 dan masuk ke sebuah nomor, seperti dalam kasus ini 3. 744 00:41:43,830 --> 00:41:45,910 Dan saya kemudian akan persegi nilai ini. 745 00:41:45,910 --> 00:41:53,340 Jadi 3 akan kuadrat kemudian menjadi 9, seperti yang kita bisa lihat di sini. 746 00:41:53,340 --> 00:41:56,530 >> Benar-benar gila, tapi ini sekarang memungkinkan saya kesempatan 747 00:41:56,530 --> 00:41:59,040 untuk membuat fungsi powerOf lainnya. 748 00:41:59,040 --> 00:42:03,680 Seperti saya dapat mengatakan, OK, baik sekarang saya ingin untuk membuat fungsi baru, powerOf (3), 749 00:42:03,680 --> 00:42:06,290 dan menyimpan yang menjadi konstan disebut kubus. 750 00:42:06,290 --> 00:42:10,220 Dan sekarang kubus akan menjadi fungsi terpisah yang kemudian akan 751 00:42:10,220 --> 00:42:14,800 mengambil beberapa nilai sebagai masukan dan kubus yang nilai seperti yang kita bisa lihat di garis bawah 752 00:42:14,800 --> 00:42:16,420 sini. 753 00:42:16,420 --> 00:42:18,590 kubus 2 akan menghasilkan 8. 754 00:42:18,590 --> 00:42:21,330 755 00:42:21,330 --> 00:42:22,680 >> Hal mudah-mudahan cukup rapi. 756 00:42:22,680 --> 00:42:25,920 Anda belum pernah melihat ini sebelumnya. 757 00:42:25,920 --> 00:42:29,990 Saya mendorong Anda untuk melihat ke dalam penutupan dan menyelidiki ini sedikit lebih. 758 00:42:29,990 --> 00:42:33,570 Ini hal-hal yang benar-benar kuat kita melihat banyak dalam JavaScript dan beberapa bahasa lainnya. 759 00:42:33,570 --> 00:42:37,160 Ini benar-benar penting untuk memahami API juga 760 00:42:37,160 --> 00:42:38,620 bahwa kita akan mendapatkan hanya satu detik. 761 00:42:38,620 --> 00:42:39,456 Iya nih? 762 00:42:39,456 --> 00:42:43,740 >> AUDIENCE: Ketika Anda melakukan powerOf (2), kurung, dan kemudian 763 00:42:43,740 --> 00:42:48,764 kurung lain, input-- lain Anda pada dasarnya mengganti alun-alun. 764 00:42:48,764 --> 00:42:50,930 DAN AMRMENDARIZ: Jadi melihat pada baris yang terakhir di sini. 765 00:42:50,930 --> 00:42:55,930 Hal ini sebenarnya benar-benar mungkin untuk melakukannya chaining seperti yang Anda disarankan. 766 00:42:55,930 --> 00:43:00,990 Jadi powerOf (5) berarti bahwa kita akan memiliki exponentiator dari 5 di sini. 767 00:43:00,990 --> 00:43:04,160 Jadi ini pada dasarnya akan menjadi hal yang sama seperti 4 dengan daya kelima, 768 00:43:04,160 --> 00:43:07,200 karena kami telah membuat sebuah exponentiating berfungsi untuk kekuatan kelima, 769 00:43:07,200 --> 00:43:09,920 dan kami melewati ke yang berfungsi nilai 4. 770 00:43:09,920 --> 00:43:12,619 Dan kita mendapatkan nilai yang yang kita harapkan, 1024. 771 00:43:12,619 --> 00:43:14,785 AUDIENCE: Dan itu bukan nama, sehingga membuatnya lebih mudah 772 00:43:14,785 --> 00:43:16,570 membaca, alun-alun apapun. 773 00:43:16,570 --> 00:43:17,903 >> DAN AMRMENDARIZ: Benar, persis. 774 00:43:17,903 --> 00:43:21,120 Jadi sebelum saya hanya menaruhnya menjadi konstan di sini jadi 775 00:43:21,120 --> 00:43:23,808 yang membuatnya mudah untuk menggunakan nama itu. 776 00:43:23,808 --> 00:43:24,308 Iya nih? 777 00:43:24,308 --> 00:43:26,942 >> AUDIENCE: Dalam konteks ini powerOf, itu bagian 778 00:43:26,942 --> 00:43:30,774 dari bahasa pemrograman sebagai lawan dengan cara Anda 779 00:43:30,774 --> 00:43:33,952 memikirkan powerOf di [tak terdengar]? 780 00:43:33,952 --> 00:43:35,660 DAN AMRMENDARIZ: Jadi dalam kasus ini, powerOf 781 00:43:35,660 --> 00:43:39,280 hanyalah nama fungsi yang saya didefinisikan di sini. 782 00:43:39,280 --> 00:43:41,801 Sehingga tidak melekat untuk bahasa itu sendiri, 783 00:43:41,801 --> 00:43:43,550 tetapi sebaliknya, itu hanya fungsi yang memiliki 784 00:43:43,550 --> 00:43:45,628 nama itu karena saya memberikan nama itu. 785 00:43:45,628 --> 00:43:48,770 786 00:43:48,770 --> 00:43:51,920 Ada pertanyaan 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 yang seperti ini di mana Anda mendefinisikan, dalam dari satu fungsi, fungsi lain. 791 00:44:03,440 --> 00:44:04,320 Dan Anda dapat melakukannya. 792 00:44:04,320 --> 00:44:06,430 Tapi itu semacam tidak benar-benar diperlukan, kan? 793 00:44:06,430 --> 00:44:09,189 Seperti mengapa saya mendefinisikan ini fungsi yang disebut exponentiator 794 00:44:09,189 --> 00:44:10,480 dan kemudian segera mengembalikannya. 795 00:44:10,480 --> 00:44:15,220 Mengapa tidak bisa aku hanya segera kembali fungsi ini? 796 00:44:15,220 --> 00:44:18,890 >> Dan pada kenyataannya, ini justru ide di balik konsep yang disebut 797 00:44:18,890 --> 00:44:22,410 fungsi anonim, di mana fungsi anonim tidak benar-benar 798 00:44:22,410 --> 00:44:25,270 memiliki nama karena mereka tidak perlu memiliki satu. 799 00:44:25,270 --> 00:44:28,700 Dan dalam hal ini, di 7B, kita dapat menemukan tepat itu. 800 00:44:28,700 --> 00:44:31,470 Ini semua kode yang sama, melakukan hal yang persis sama, 801 00:44:31,470 --> 00:44:35,570 tapi sekarang kita sudah berubah sedikit sehingga bahwa fungsi powerOf ini segera 802 00:44:35,570 --> 00:44:37,750 mengembalikan fungsi. 803 00:44:37,750 --> 00:44:44,150 Perhatikan bahwa setelah kembali, ada braket keriting terbuka. 804 00:44:44,150 --> 00:44:46,410 Ini mengharapkan masukan ini ganda. 805 00:44:46,410 --> 00:44:48,560 Ini mengharapkan bahwa output ganda. 806 00:44:48,560 --> 00:44:52,175 Dan kemudian di kunci memisahkan kode itu sendiri. 807 00:44:52,175 --> 00:44:53,550 Jadi ini adalah fungsi anonim. 808 00:44:53,550 --> 00:44:57,030 Itu tidak benar-benar memiliki nama, sedangkan sebelum itu disebut exponentiator. 809 00:44:57,030 --> 00:45:00,229 Tapi seperti yang kita lihat, hanya benar-benar tidak mengacu pada exponentiator 810 00:45:00,229 --> 00:45:01,270 di luar fungsi tersebut. 811 00:45:01,270 --> 00:45:02,470 Jadi itu tidak masalah. 812 00:45:02,470 --> 00:45:06,300 Jadi fungsi anonim ini disebut karena tak bernama, 813 00:45:06,300 --> 00:45:09,107 tapi itu masih digunakan dalam konteks kode ini. 814 00:45:09,107 --> 00:45:13,690 815 00:45:13,690 --> 00:45:16,079 >> Pasangan yang berikutnya saya akan terus mudah-mudahan 816 00:45:16,079 --> 00:45:17,370 meniup pikiran Anda sedikit. 817 00:45:17,370 --> 00:45:20,410 Kita dapat menyederhanakan ini bahkan lebih. 818 00:45:20,410 --> 00:45:24,490 Karena seperti cerdik disebutkan sebelumnya, 819 00:45:24,490 --> 00:45:29,100 mungkin kita benar-benar tahu, oleh menyimpulkan dari kode ini, apa 820 00:45:29,100 --> 00:45:31,750 output dari kode ini akan menjadi. 821 00:45:31,750 --> 00:45:38,180 Dan pada kenyataannya, dalam fungsi anonim ini, kita sebenarnya dapat menyimpulkan jenis data. 822 00:45:38,180 --> 00:45:41,650 >> Jadi dalam satu ini, kita tidak lagi perlu secara eksplisit mendefinisikan 823 00:45:41,650 --> 00:45:44,850 jenis data yang menjadi input dan output dari fungsi ini 824 00:45:44,850 --> 00:45:45,890 untuk beberapa alasan. 825 00:45:45,890 --> 00:45:51,390 Salah satunya adalah bahwa kita telah ditetapkan, sampai pada prototipe dari fungsi melampirkan, 826 00:45:51,390 --> 00:45:55,770 jenis data ini anonim fungsi harus input dan output. 827 00:45:55,770 --> 00:45:57,900 Dan dari yang lain, kami dapat menyimpulkan dari kode 828 00:45:57,900 --> 00:46:01,930 di sini bahwa kita menerima masukan yang tipe ganda 829 00:46:01,930 --> 00:46:03,670 dan mengembalikan ganda. 830 00:46:03,670 --> 00:46:07,890 >> Perhatikan bahwa di sini kita tidak secara eksplisit didefinisikan nama-nama argumen 831 00:46:07,890 --> 00:46:11,220 bahwa fungsi ini menerima. 832 00:46:11,220 --> 00:46:16,180 Dan kita melihat kita dapat merujuk parameter menggunakan $ 0, $ 1, 833 00:46:16,180 --> 00:46:20,140 seterusnya dan sebagainya, tergantung pada jumlah 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 melihat banyak adalah braket keriting ini terbuka 837 00:46:29,740 --> 00:46:32,797 definisi diikuti oleh $ 0, dan kemudian beberapa operasi, 838 00:46:32,797 --> 00:46:34,130 dan kemudian braket keriting tertutup. 839 00:46:34,130 --> 00:46:38,630 Itulah fungsi anonim yang melakukan operasi ini. 840 00:46:38,630 --> 00:46:42,940 Ini memiliki parameter ini di mana itu jenis adalah tereka. 841 00:46:42,940 --> 00:46:44,860 Bahwa parameter pertama adalah $ 0. 842 00:46:44,860 --> 00:46:49,010 Dan beberapa operasi terjadi pada itu $ 0. 843 00:46:49,010 --> 00:46:52,100 >> AUDIENCE: Jadi tanda dolar berarti parameter pada dasarnya, 844 00:46:52,100 --> 00:46:53,429 dan 0 berarti yang pertama? 845 00:46:53,429 --> 00:46:54,720 DAN Armendariz: Itu benar. 846 00:46:54,720 --> 00:46:59,100 Jadi tanda dolar pada dasarnya berarti parameter, dan 0 berarti yang pertama. 847 00:46:59,100 --> 00:47:02,760 Tetapi bekerja secara khusus di hal ini di mana saya belum bernama 848 00:47:02,760 --> 00:47:07,940 argumen dalam fungsi anonim saya. 849 00:47:07,940 --> 00:47:11,119 >> AUDIENCE: Apakah Perl atau sesuatu yang harus tanda dolar ini, dolar 0 di sana? 850 00:47:11,119 --> 00:47:12,702 DAN Armendariz: Apakah yang, aku minta maaf? 851 00:47:12,702 --> 00:47:15,360 AUDIENCE: Apakah Perl memiliki dolar ini 0, dolar 1-- 852 00:47:15,360 --> 00:47:17,318 DAN Armendariz: Saya tidak terlalu akrab dengan Perl, 853 00:47:17,318 --> 00:47:21,340 tapi apa yang mendefinisikan variabel PHP berdasarkan tanda-tanda dolar. 854 00:47:21,340 --> 00:47:26,120 Dan mungkin ada beberapa bahasa yang memiliki fitur seperti ini. 855 00:47:26,120 --> 00:47:28,240 Bahkan, Swift meminjam banyak fitur seperti ini 856 00:47:28,240 --> 00:47:29,489 dari banyak bahasa lain. 857 00:47:29,489 --> 00:47:32,380 Kita melihat petunjuk Python di dalamnya. 858 00:47:32,380 --> 00:47:35,800 Definisi jenis tampaknya datang dari OCaml. 859 00:47:35,800 --> 00:47:38,932 Dan kami memiliki hanya sekelompok seluruh barang dari banyak bahasa yang berbeda. 860 00:47:38,932 --> 00:47:40,640 Itulah salah satu yang bagus hal tentang Swift 861 00:47:40,640 --> 00:47:43,390 adalah bahwa dibutuhkan banyak yang terbaik ide dari sekelompok bahasa 862 00:47:43,390 --> 00:47:47,229 dan sendok sepatu mereka semua bersama-sama menjadi satu bahasa yang super. 863 00:47:47,229 --> 00:47:49,520 Bahkan, jika Anda mengizinkan saya untuk terus meniup pikiran Anda, 864 00:47:49,520 --> 00:47:51,000 jadi kami sudah melakukan semua ini. 865 00:47:51,000 --> 00:47:56,690 Kami mungkin dapat menyederhanakan ini sedikit bit dengan menyadari bahwa, tentu saja, 866 00:47:56,690 --> 00:48:02,120 Swift memiliki exponentiating fungsi built in. 867 00:48:02,120 --> 00:48:04,660 Jika saya mengimpor Darwin, yang hanya perpustakaan yang 868 00:48:04,660 --> 00:48:09,680 fitur fungsi yang disebut pow ini, sekarang Saya dapat menyederhanakan kekuatanku fungsi 869 00:48:09,680 --> 00:48:11,830 menjadi berikut. 870 00:48:11,830 --> 00:48:15,860 Itu akan kembali fungsi anonim ini. 871 00:48:15,860 --> 00:48:17,950 >> Tapi melihat bagaimana sederhana ini sekarang. 872 00:48:17,950 --> 00:48:22,780 Ini adalah fungsi anonim yang adalah menerima beberapa jenis data, 873 00:48:22,780 --> 00:48:26,600 dan itu akan menjadi salah satu Argumen khusus, 874 00:48:26,600 --> 00:48:29,320 direferensikan di $ 0 yang adalah tipe ganda. 875 00:48:29,320 --> 00:48:32,680 Hal ini akan kembali jenis ganda. 876 00:48:32,680 --> 00:48:35,760 Tapi pernyataan kembali sekarang implisit. 877 00:48:35,760 --> 00:48:39,990 >> Dan itu adalah gaya yang tepat ini yang sangat, sangat lazim di 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 semua waktu di Swift. 880 00:48:43,190 --> 00:48:46,150 Jadi aku menunjukkan semua ini untuk Anda karena sintaks ini. 881 00:48:46,150 --> 00:48:49,070 Hal ini sangat umum untuk melihat, yang berarti 882 00:48:49,070 --> 00:48:51,420 adalah fungsi anonim yang melakukan 883 00:48:51,420 --> 00:48:54,640 beberapa operasi pada argumen ini. 884 00:48:54,640 --> 00:48:56,940 Dan ada pengembalian implisit. 885 00:48:56,940 --> 00:49:01,850 Jadi itu benar-benar hal yang sama bagi kita untuk mengatakan ini, di sini. 886 00:49:01,850 --> 00:49:05,730 887 00:49:05,730 --> 00:49:08,150 >> Karena keriting ini braket adalah fungsi, 888 00:49:08,150 --> 00:49:10,480 kami melakukan operasi ini pada argumen pertama. 889 00:49:10,480 --> 00:49:12,170 Kita akan kembali itu. 890 00:49:12,170 --> 00:49:14,815 Tapi kembali luar ini kembali bahwa seluruh fungsi, 891 00:49:14,815 --> 00:49:19,855 bahwa fungsi anonim seluruh bahwa kita baru saja dibuat. 892 00:49:19,855 --> 00:49:21,689 Ada pertanyaan lain? 893 00:49:21,689 --> 00:49:23,980 Baiklah, saya tidak tahu apakah kalian siap untuk ini, 894 00:49:23,980 --> 00:49:27,455 tapi kita bisa pergi lebih gila lagi dengan Swift. 895 00:49:27,455 --> 00:49:28,560 Anda siap? 896 00:49:28,560 --> 00:49:29,930 OK, ini sangat bagus. 897 00:49:29,930 --> 00:49:35,310 >> Sekarang kita benar-benar memiliki kemampuan untuk, di Swift, karena cara modular 898 00:49:35,310 --> 00:49:39,650 dan bagaimana berbasis protokol itu, untuk mendefinisikan operator panik kita sendiri. 899 00:49:39,650 --> 00:49:44,060 Seperti dalam kasus ini, kami tidak punya Operator untuk exponentiation-- baik, 900 00:49:44,060 --> 00:49:47,990 untuk melakukan kekuatan sesuatu. 901 00:49:47,990 --> 00:49:53,632 Tapi aku bisa, di Swift, mendefinisikan baru operator yang tidak tepat itu. 902 00:49:53,632 --> 00:49:55,590 Jadi dalam hal ini ada sekelompok sintaks sini. 903 00:49:55,590 --> 00:49:59,980 Dan aku akan memungkinkan Anda untuk melihat itu di rumah ketika Anda melihat ini. 904 00:49:59,980 --> 00:50:06,890 Tapi kita mendefinisikan infiks ini operator, **, yang kemudian memungkinkan kita, 905 00:50:06,890 --> 00:50:09,840 dengan mendefinisikan apa yang Fungsi ** sebenarnya 906 00:50:09,840 --> 00:50:15,010 tidak, untuk menerima tangan kiri sisi dan sisi kanan, 907 00:50:15,010 --> 00:50:21,190 dan kemudian untuk mengembalikan eksponen yang sisi kiri ke sisi kanan. 908 00:50:21,190 --> 00:50:24,850 >> Dan jadi sekarang semua saya tiba-tiba telah menciptakan penghitung baru. 909 00:50:24,850 --> 00:50:29,490 Jadi 2 ** 3 berarti 2 pangkat ketiga. 910 00:50:29,490 --> 00:50:34,420 [PIKIRAN SUARA BLOWING] ini oleh sendiri harus membuat Anda menjadi seperti, 911 00:50:34,420 --> 00:50:37,960 OK, sekrup C. Aku 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 cukup fantastis. 914 00:50:40,140 --> 00:50:42,240 >> Meskipun ini adalah contoh yang bagus. 915 00:50:42,240 --> 00:50:45,570 Tapi saya tidak pernah di luar dari contoh ini benar-benar 916 00:50:45,570 --> 00:50:46,800 didefinisikan operator saya sendiri. 917 00:50:46,800 --> 00:50:49,710 Tapi tetap, itu menunjukkan banyak kekuatan Swift 918 00:50:49,710 --> 00:50:54,050 dan mengapa ini sebenarnya benar-benar sangat dingin. 919 00:50:54,050 --> 00:50:55,832 Baiklah? 920 00:50:55,832 --> 00:50:57,790 AUDIENCE: Jika Anda mendefinisikan operator Anda sendiri, 921 00:50:57,790 --> 00:51:02,940 bagaimana Anda tahu Anda tidak sengaja mencoba dan membuat operator yang 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 jelas bahwa Anda mungkin tidak terlihat sebelumnya. 924 00:51:12,210 --> 00:51:15,050 >> DAN Armendariz: Jadi jika Anda mencoba untuk menentukan operator Anda sendiri, 925 00:51:15,050 --> 00:51:20,970 ada risiko mendefinisikan salah satu dari operator yang ada. 926 00:51:20,970 --> 00:51:24,870 Yang masuk ke tingkat detail yang Saya tidak berpikir kita punya waktu untuk pergi. 927 00:51:24,870 --> 00:51:27,620 Tapi itu adalah risiko. 928 00:51:27,620 --> 00:51:31,320 Dan itu sebenarnya alasan mengapa Saya tidak menggunakan simbol sisipan, yang 929 00:51:31,320 --> 00:51:36,210 ketika kita sedang mengetik daya, kita biasanya menggunakan 4 sedikit sisipan 5 atau sesuatu 930 00:51:36,210 --> 00:51:40,560 seperti itu, hanya ketika kita berada Gchatting teman atau apa pun. 931 00:51:40,560 --> 00:51:43,660 Tapi dalam kasus itu, yang benar-benar akan menyebabkan tabrakan. 932 00:51:43,660 --> 00:51:46,450 Dan jadi aku menghindari itu hanya karena Saya kebetulan tahu dalam hal ini 933 00:51:46,450 --> 00:51:50,430 bahwa yang akan menyebabkan tabrakan itu. 934 00:51:50,430 --> 00:51:52,270 >> Baiklah. 935 00:51:52,270 --> 00:51:55,080 Sekarang sayangnya, untuk tujuh menit terakhir, 936 00:51:55,080 --> 00:51:57,410 Saya harus terus bertiup pikiran Anda sedikit. 937 00:51:57,410 --> 00:52:00,230 Jadi memungkinkan saya untuk menunjukkan Anda beberapa hal lain juga. 938 00:52:00,230 --> 00:52:03,710 >> Kami telah menunjukkan Anda ide ini memiliki fungsi-fungsi anonim, 939 00:52:03,710 --> 00:52:07,040 Penutupan ini yang memungkinkan Anda untuk jenis lulus fungsi sekitar. 940 00:52:07,040 --> 00:52:08,100 Anda dapat kembali mereka. 941 00:52:08,100 --> 00:52:09,490 Anda dapat memanipulasi mereka. 942 00:52:09,490 --> 00:52:11,790 Anda dapat melakukan segala macam hal gila. 943 00:52:11,790 --> 00:52:14,850 >> Tapi satu hal lain yang terjadi menjadi berguna 944 00:52:14,850 --> 00:52:19,740 adalah kemampuan untuk, sebagai lawan untuk kembali fungsi-fungsi 945 00:52:19,740 --> 00:52:25,146 dalam fungsi, untuk lulus fungsi sebagai parameter ke fungsi lain. 946 00:52:25,146 --> 00:52:30,430 Anda mungkin berpikir dengan baik mengapa di Bumi akan saya ingin melakukan sesuatu seperti itu? 947 00:52:30,430 --> 00:52:33,660 >> Nah, mari kita mengatakan bahwa saya ingin untuk mengambil Operator ini yang saya 948 00:52:33,660 --> 00:52:40,260 bekerja sangat keras untuk membuat dan menerapkan untuk sekelompok angka yang berbeda 949 00:52:40,260 --> 00:52:41,770 dalam array. 950 00:52:41,770 --> 00:52:46,700 Jadi dalam hal ini saya memiliki sebuah array integers-- 1, 4, 7, 2, 5, 10, 56. 951 00:52:46,700 --> 00:52:48,080 Dan saya ingin melipatgandakan mereka semua. 952 00:52:48,080 --> 00:52:50,430 Cara yang kita akan biasanya melakukannya adalah dengan hanya menulis 953 00:52:50,430 --> 00:52:53,440 sederhana untuk loop yang iterates atas mereka semua 954 00:52:53,440 --> 00:52:57,140 dan melakukan semacam operasi persegi atas mereka, 955 00:52:57,140 --> 00:53:02,700 memasukkan nilai-nilai baru ke dalam baru variabel, atau lebih tepatnya, array baru di sini. 956 00:53:02,700 --> 00:53:07,370 Dan nilai output Hasilnya kemudian semua orang array, 957 00:53:07,370 --> 00:53:10,200 atau lebih tepatnya semua orang elemen sekarang kuadrat. 958 00:53:10,200 --> 00:53:12,680 >> Dan kita bisa melakukan hal yang sama hal untuk cubing itu, 959 00:53:12,680 --> 00:53:15,360 tapi bel alarm sedikit harus pergi off 960 00:53:15,360 --> 00:53:17,360 mengatakan bahwa mungkin ada beberapa cara yang kita akan 961 00:53:17,360 --> 00:53:19,860 dapat menyederhanakan 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 bisa menciptakan fungsi yang memungkinkan kita 964 00:53:25,320 --> 00:53:28,350 untuk menerima, sebagai predator, fungsi? 965 00:53:28,350 --> 00:53:30,350 Jadi dalam hal ini, mengambil melihat argumen ini. 966 00:53:30,350 --> 00:53:33,220 Kita akan menerima daftar ganda. 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 variabel yang disebut f yang akan untuk mengambil Double dan mengembalikan ganda. 969 00:53:40,990 --> 00:53:43,320 Dan seluruh keluaran seluruh fungsi ini 970 00:53:43,320 --> 00:53:47,310 disebut mapper akan mengembalikan array disebut ganda. 971 00:53:47,310 --> 00:53:52,380 >> Apa ini maka akan memungkinkan saya untuk lakukan adalah untuk iterate atas daftar itu 972 00:53:52,380 --> 00:53:56,350 dan melakukan hal yang sama, tapi sekarang menerapkan fungsi yang pada setiap 973 00:53:56,350 --> 00:53:58,970 dari nilai-nilai individu dalam daftar itu. 974 00:53:58,970 --> 00:54:00,750 Jadi saya tidak benar-benar tahu apa f adalah. 975 00:54:00,750 --> 00:54:02,010 Tidak masalah bagi saya. 976 00:54:02,010 --> 00:54:06,530 Tapi selama dibutuhkan dalam ganda, melakukan beberapa operasi di atasnya, 977 00:54:06,530 --> 00:54:08,640 dan kemudian mengembalikan Ganda, saya kemudian akan 978 00:54:08,640 --> 00:54:13,415 mampu memetakan fungsi yang melintasi setiap elemen dalam daftar. 979 00:54:13,415 --> 00:54:16,270 980 00:54:16,270 --> 00:54:20,930 >> Dan jenis pemrograman disebut fungsi tatanan yang lebih tinggi, 981 00:54:20,930 --> 00:54:24,440 di mana kita melewati fungsi sekitar sebagai parameter 982 00:54:24,440 --> 00:54:26,430 dan melakukan hal-hal dengan fungsi. 983 00:54:26,430 --> 00:54:29,640 Ini semacam seperti mengambil semua ini ide-ide yang telah kita pelajari di CS50 984 00:54:29,640 --> 00:54:31,390 dan membawa mereka semacam dari ke tingkat berikutnya. 985 00:54:31,390 --> 00:54:34,140 Dan ini semua barang gaya CS51. 986 00:54:34,140 --> 00:54:37,080 Dan jadi kami akan pergi secara mendalam lebih di kelas seperti itu. 987 00:54:37,080 --> 00:54:38,930 >> Tapi ini juga penting di sini karena kita 988 00:54:38,930 --> 00:54:42,010 melihat banyak fungsi yang digunakan di Swift 989 00:54:42,010 --> 00:54:45,590 yang pada dasarnya tidak ini, di mana kita memiliki 990 00:54:45,590 --> 00:54:48,300 beberapa nomor, beberapa array angka. 991 00:54:48,300 --> 00:54:50,850 Kita akan lulus bahwa array ke mapper kami. 992 00:54:50,850 --> 00:54:55,770 Dan kita juga akan melewati beberapa fungsi, yang 993 00:54:55,770 --> 00:54:57,950 kita sudah didefinisikan di sini. 994 00:54:57,950 --> 00:54:59,690 Ini akan menjadi persegi. 995 00:54:59,690 --> 00:55:02,220 Dan kita akan kemudian persegi semua angka-angka 996 00:55:02,220 --> 00:55:04,710 dan menyimpan yang menjadi hasil ini di sini. 997 00:55:04,710 --> 00:55:07,280 998 00:55:07,280 --> 00:55:11,000 >> Jadi hal ini kita telah menetapkan kami fungsi sendiri disebut mapper. 999 00:55:11,000 --> 00:55:15,370 Tapi hal yang tepat ini, pada kenyataannya, dibangun ke Swift. 1000 00:55:15,370 --> 00:55:18,960 Ada berbagai fungsi disebut peta. 1001 00:55:18,960 --> 00:55:21,520 Ada fungsi peta, ada mengurangi fungsi, 1002 00:55:21,520 --> 00:55:25,630 dan ada fungsi filter, yang pada dasarnya menerapkan fungsi 1003 00:55:25,630 --> 00:55:30,782 untuk setiap elemen tunggal dalam daftar memodifikasi mereka dalam beberapa cara. 1004 00:55:30,782 --> 00:55:34,510 >> AUDIENCE: Jadi karena Anda mengubah data ke format lain 1005 00:55:34,510 --> 00:55:36,134 melalui sebuah function-- 1006 00:55:36,134 --> 00:55:37,050 DAN Armendariz: Benar. 1007 00:55:37,050 --> 00:55:39,420 Ya, sehingga fungsi bahwa kita menerima 1008 00:55:39,420 --> 00:55:41,790 adalah mengubah data dalam beberapa cara. 1009 00:55:41,790 --> 00:55:44,700 Dalam hal ini, kami baik mengkuadratkan itu, atau kami cubing itu, 1010 00:55:44,700 --> 00:55:50,060 atau benar-benar, kita bisa melakukan tidak ada operasi di atasnya sama sekali. 1011 00:55:50,060 --> 00:55:54,150 >> Tapi mari saya tunjukkan bagaimana ini kemudian akan terlihat dalam praktek. 1012 00:55:54,150 --> 00:55:56,681 Dan lagi, saya menjalankan sedikit waktu. jadi saya tidak 1013 00:55:56,681 --> 00:55:59,430 akan dapat pergi ke semua dari kode sumber di sini secara rinci. 1014 00:55:59,430 --> 00:56:00,721 Tapi saya mendorong Anda untuk melakukan itu. 1015 00:56:00,721 --> 00:56:03,850 Kami akan posting secepat mungkin setelah pembicaraan ini. 1016 00:56:03,850 --> 00:56:07,610 >> Tetapi jika anda melihat ini, asumsikan bahwa kita memiliki daftar nomor, 1017 00:56:07,610 --> 00:56:10,260 array angka dalam ini variabel yang disebut nomor. 1018 00:56:10,260 --> 00:56:16,670 Kemudian kita ingin melakukan ini Operasi filter pada angka-angka. 1019 00:56:16,670 --> 00:56:19,730 Jadi filter yang lebih tinggi fungsi agar 1020 00:56:19,730 --> 00:56:24,660 menerima array dan juga fungsi. 1021 00:56:24,660 --> 00:56:28,760 Dan pada setiap elemen dalam array, ia melakukan fungsi itu. 1022 00:56:28,760 --> 00:56:31,990 >> Jika itu kembali fungsi benar, itu membuat item. 1023 00:56:31,990 --> 00:56:36,100 Jika fungsi yang mengembalikan palsu, itu membuang item. 1024 00:56:36,100 --> 00:56:40,480 Dan kemudian ia mengembalikan daftar yang kemudian membuat semua 1025 00:56:40,480 --> 00:56:44,360 dari barang-barang yang telah disaring. 1026 00:56:44,360 --> 00:56:47,150 >> Jadi dengan kata lain, ini adalah ide yang sama, gradebook. 1027 00:56:47,150 --> 00:56:50,800 Kita mungkin memiliki berbagai nilai ke nomor ini nilai disebut. 1028 00:56:50,800 --> 00:56:55,590 Bisa 100, dan 70, dan 40, seterusnya dan sebagainya. 1029 00:56:55,590 --> 00:56:59,110 Apa filter ini dilakukan adalah pemberitahuan bahwa ini adalah bahwa gula sintaksis 1030 00:56:59,110 --> 00:57:01,310 untuk fungsi anonim. 1031 00:57:01,310 --> 00:57:05,980 Ini adalah fungsi anonim mengatakan bahwa parameter bahwa aku menerima 1032 00:57:05,980 --> 00:57:09,690 akan menjadi, jika lebih besar dari 70, 1033 00:57:09,690 --> 00:57:15,837 maka ini akan kembali benar, yang berarti bahwa item yang akan disimpan dalam filter ini. 1034 00:57:15,837 --> 00:57:17,920 Jadi mari kita menjadi sedikit lebih konkret tentang hal ini. 1035 00:57:17,920 --> 00:57:25,760 Jika saya memiliki array ini angka dan terdiri dari 100, 70, dan 40, 1036 00:57:25,760 --> 00:57:29,730 Saya melakukan filter ini operasi pada masing-masing dari mereka. 1037 00:57:29,730 --> 00:57:33,270 Sehingga pertama adalah nilai ini dari 100. 1038 00:57:33,270 --> 00:57:36,770 100 lebih besar dari atau sama 70 adalah benar, yang 1039 00:57:36,770 --> 00:57:41,950 berarti bahwa 100 disimpan di ini salinan baru array ini. 1040 00:57:41,950 --> 00:57:44,290 70 juga melewati. 1041 00:57:44,290 --> 00:57:46,020 Tapi 40 tidak. 1042 00:57:46,020 --> 00:57:54,290 Jadi apa yang dikembalikan di passingCount adalah array dari elemen 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 hanya dua item yang disimpan. 1045 00:57:59,870 --> 00:58:03,740 Dan alasan saya cepat pergi melalui banyak semacam ini agar tinggi 1046 00:58:03,740 --> 00:58:08,680 hal-hal yang karena ini adalah bahwa umum hal yang akan Anda lihat di Swift cantik 1047 00:58:08,680 --> 00:58:16,810 sering, adalah melakukan beberapa operasi menggunakan sintaks fungsi anonim ini. 1048 00:58:16,810 --> 00:58:18,450 >> Ada beberapa hal menarik. 1049 00:58:18,450 --> 00:58:24,730 Switch adalah benar-benar kuat di Swift, Maksud saya seperti gila, gila kuat. 1050 00:58:24,730 --> 00:58:28,250 Anda dapat menggunakan switch, dan Anda benar-benar dapat menerapkannya 1051 00:58:28,250 --> 00:58:33,160 untuk rentang, yang merupakan jenis gila, dan melakukan hal-hal mewah seperti itu. 1052 00:58:33,160 --> 00:58:37,540 >> Tapi dalam beberapa menit terakhir, Saya ingin langsung beralih cukup jauh 1053 00:58:37,540 --> 00:58:46,940 dan menunjukkan contoh spesifik bagaimana kita dapat membuat di app iOS menggunakan Swift. 1054 00:58:46,940 --> 00:58:49,040 Jadi, ketika Anda melakukan ini, Anda harus mengambil 1055 00:58:49,040 --> 00:58:51,990 terlihat at-- di Apple dokumentasi, mereka 1056 00:58:51,990 --> 00:58:56,084 memiliki banyak tutorial benar-benar baik untuk membuat aplikasi pertama Anda. 1057 00:58:56,084 --> 00:58:58,250 Dan saya mendorong Anda untuk melakukan itu karena mereka membawa Anda 1058 00:58:58,250 --> 00:59:04,110 melalui semua langkah dari apa yang tepat untuk klik untuk membuat aplikasi iOS. 1059 00:59:04,110 --> 00:59:07,290 >> Tapi di sini kita memiliki aplikasi iOS ini. 1060 00:59:07,290 --> 00:59:10,960 Dan itu adalah aplikasi yang cukup sederhana benar-benar. 1061 00:59:10,960 --> 00:59:13,840 Jika saya menjalankan ini, biarkan saya menunjukkan Anda seperti apa. 1062 00:59:13,840 --> 00:59:19,480 Semua itu pada dasarnya dilakukannya itu menarik dari internet file JSON 1063 00:59:19,480 --> 00:59:22,300 bahwa saya telah disimpan di server. 1064 00:59:22,300 --> 00:59:26,310 Dan bahwa file JSON mendefinisikan gambar yang memungkinkan 1065 00:59:26,310 --> 00:59:31,680 saya untuk kemudian siklus melalui, pada saya app, gambar dari web server saya. 1066 00:59:31,680 --> 00:59:32,880 >> Jadi saya miliki di sini getNextImage. 1067 00:59:32,880 --> 00:59:37,100 Ini beban gambar dari internet, dan kemudian menampilkannya di layar. 1068 00:59:37,100 --> 00:59:38,200 >> Sehingga cukup sederhana. 1069 00:59:38,200 --> 00:59:41,550 Tetapi tujuan di sini adalah untuk menunjukkan Anda bagaimana kita bisa menggabungkan hal-hal 1070 00:59:41,550 --> 00:59:47,820 dari beberapa minggu terakhir dari CS50 ke dalam aplikasi iOS yang sebenarnya. 1071 00:59:47,820 --> 00:59:53,140 Dengan kata lain, mungkin salah satu hal yang akan Anda ingin lakukan 1072 00:59:53,140 --> 00:59:56,340 adalah memiliki sebuah aplikasi iOS yang dapat menarik data dari internet 1073 00:59:56,340 --> 00:59:59,070 dan menunjukkan pengguna beberapa informasi. 1074 00:59:59,070 --> 01:00:03,130 Yang sepenuhnya titik kode ini sumber di sini. 1075 01:00:03,130 --> 01:00:07,890 >> Jadi ada banyak yang bisa dikatakan tentang bagaimana melakukan pengembangan iOS yang sebenarnya. 1076 01:00:07,890 --> 01:00:12,860 Ada banyak sintaks gila bahwa kita belum melihat belum cukup 1077 01:00:12,860 --> 01:00:15,580 seperti kelas, apa kelas sebenarnya. 1078 01:00:15,580 --> 01:00:19,470 Kami sebagian besar dapat mengabaikan bahwa untuk saat ini. 1079 01:00:19,470 --> 01:00:23,250 >> Tapi perhatikan bahwa kita telah terkandung dalam hal ini berbagai hal 1080 01:00:23,250 --> 01:00:27,720 bahwa kita sudah melihat seperti fungsi yang memiliki nama tertentu. 1081 01:00:27,720 --> 01:00:32,650 Dan ketika kita memberikan mereka fungsi nama yang benar 1082 01:00:32,650 --> 01:00:36,530 yang diharapkan oleh iOS, pada kenyataannya ini terasa sedikit ajaib. 1083 01:00:36,530 --> 01:00:40,300 Tetapi ketika Anda membuat aplikasi iOS, ada 1084 01:00:40,300 --> 01:00:47,590 adalah nama fungsi spesifik yang disebut oleh telepon itu sendiri 1085 01:00:47,590 --> 01:00:52,440 sebagai aplikasi sedang loading untuk mencoba untuk membuat proses yang benar-benar 1086 01:00:52,440 --> 01:00:54,787 menjalankan aplikasi Anda. 1087 01:00:54,787 --> 01:00:58,120 Jadi sekali lagi, ada banyak hal yang saya harus mengabaikan sini agar kita 1088 01:00:58,120 --> 01:01:00,570 membicarakan hal ini secara khusus. 1089 01:01:00,570 --> 01:01:06,050 Tapi saya mendorong Anda untuk melihat mungkin seminar iOS lain, tetapi juga beberapa 1090 01:01:06,050 --> 01:01:09,290 dari online tutorial yang melakukan pekerjaan yang lebih baik menggambarkan 1091 01:01:09,290 --> 01:01:11,030 informasi yang spesifik. 1092 01:01:11,030 --> 01:01:15,760 >> Tapi kita bisa melihat beberapa hal yang yang menarik dari kode sini. 1093 01:01:15,760 --> 01:01:17,950 Perhatikan bahwa kita memiliki jika pernyataan. 1094 01:01:17,950 --> 01:01:20,400 By the way, salah satu yang penting hal tentang jika pernyataan 1095 01:01:20,400 --> 01:01:24,860 adalah bahwa kurung di sekitar Ekspresi Boolean adalah opsional. 1096 01:01:24,860 --> 01:01:30,800 Tapi kurung kurawal tidak opsional, tidak peduli betapa sedikit atau banyak baris kode 1097 01:01:30,800 --> 01:01:32,360 Anda memiliki dalam sebuah pernyataan jika. 1098 01:01:32,360 --> 01:01:38,670 Anda tidak dapat memiliki jika pernyataan tanpa kurung kurawal di Swift. 1099 01:01:38,670 --> 01:01:41,000 >> Dan ini, baik, semacam konyol. 1100 01:01:41,000 --> 01:01:43,910 Tapi ada alasan historis untuk itu. 1101 01:01:43,910 --> 01:01:46,180 Ini seharusnya untuk menyelamatkan Anda dari diri Anda sendiri. 1102 01:01:46,180 --> 01:01:49,899 Seperti ini misalnya, Anda tidak bisa menghilangkan kurung kurawal sekitar yang 1103 01:01:49,899 --> 01:01:50,440 jika pernyataan. 1104 01:01:50,440 --> 01:01:52,730 Mereka yang sebenarnya diperlukan. 1105 01:01:52,730 --> 01:01:54,480 Jadi saya mendorong Anda untuk Lihatlah ini. 1106 01:01:54,480 --> 01:01:56,230 Tapi ada satu lagi membangun yang saya inginkan 1107 01:01:56,230 --> 01:02:02,640 menunjukkan tentang Swift yang baru untuk Swift 2.0 dibandingkan 1108 01:02:02,640 --> 01:02:08,460 untuk versi Swift, yang berikut ini. 1109 01:02:08,460 --> 01:02:11,620 Mari kita lihat di mana aku taruh di sini? 1110 01:02:11,620 --> 01:02:16,630 >> Jadi dalam fungsi ini disebut fetchJSON, fungsi ini 1111 01:02:16,630 --> 01:02:23,450 bertanggung jawab untuk menarik bahwa JSON file dari URL, yang kebetulan 1112 01:02:23,450 --> 01:02:26,310 akan berjalan pada IDE CS50 saya. 1113 01:02:26,310 --> 01:02:28,580 Aku baru saja mulai Apache, menaruh file JSON saya di sana, 1114 01:02:28,580 --> 01:02:32,110 dan aku bisa kemudian tarik yang data dari internet menggunakan 1115 01:02:32,110 --> 01:02:36,430 fungsi ini dan URL ini, yang disediakan oleh telepon. 1116 01:02:36,430 --> 01:02:40,490 Ini disediakan oleh perpustakaan yang Anda gunakan ketika 1117 01:02:40,490 --> 01:02:43,140 Anda melakukan beberapa pengembangan aplikasi iOS. 1118 01:02:43,140 --> 01:02:49,690 >> Perhatikan di sini bahwa ada yang tidak biasa ini membangun sintaksis disebut penjaga. 1119 01:02:49,690 --> 01:02:53,530 Dan benar-benar semua ini di Swift adalah cara untuk memverifikasi 1120 01:02:53,530 --> 01:02:56,870 bahwa beberapa hal memiliki telah dipenuhi sebelum Anda 1121 01:02:56,870 --> 01:03:00,000 melanjutkan dengan sisa fungsi. 1122 01:03:00,000 --> 01:03:04,260 Jadi saya bisa memiliki, menggunakan jenis ini opsional, 1123 01:03:04,260 --> 01:03:10,530 Saya bisa menemukan URL dengan menjalankan fungsi NSURL ini 1124 01:03:10,530 --> 01:03:16,640 dan menyimpan yang menjadi URL konstan, dan kemudian memeriksa 1125 01:03:16,640 --> 01:03:20,820 untuk melihat apakah URL itu nihil, karena akan kembali jenis opsional. 1126 01:03:20,820 --> 01:03:25,660 Dan jika itu nihil, maka saya akan mencetak kesalahan dan kemudian kembali. 1127 01:03:25,660 --> 01:03:29,970 >> Tapi sebaliknya, apa penjaga memungkinkan kita lakukan adalah bahwa hal yang sangat, 1128 01:03:29,970 --> 01:03:34,550 tapi memastikan bahwa itu adalah benar-benar terjadi bahwa url 1129 01:03:34,550 --> 01:03:38,020 telah benar ditetapkan oleh NSURL. 1130 01:03:38,020 --> 01:03:41,810 Dan jika sudah, maka melompati ini, dan itu 1131 01:03:41,810 --> 01:03:46,110 akan memungkinkan Anda untuk melanjutkan dengan url yang telah didefinisikan dengan baik. 1132 01:03:46,110 --> 01:03:48,830 Tetapi jika itu adalah kasus yang url tidak didefinisikan dengan baik, 1133 01:03:48,830 --> 01:03:52,550 jika fungsi ini kembali kesalahan atau beberapa hal tak terduga lainnya 1134 01:03:52,550 --> 01:03:58,030 benar-benar terjadi, penjaga konstruk ini memungkinkan kita untuk kemudian output yang error 1135 01:03:58,030 --> 01:04:00,390 dan kembali segera. 1136 01:04:00,390 --> 01:04:00,890 Iya nih? 1137 01:04:00,890 --> 01:04:04,839 >> AUDIENCE: Jadi itu semacam dari seperti jika kemudian lain? 1138 01:04:04,839 --> 01:04:07,130 DAN Armendariz: Ini semacam seperti jika kemudian lain, ya, 1139 01:04:07,130 --> 01:04:14,200 kecuali bahwa url ini kemudian didefinisikan untuk segala sesuatu di bawah ini. 1140 01:04:14,200 --> 01:04:20,420 Jika melewati penjaga ini, maka akan benar-benar diisi dengan data 1141 01:04:20,420 --> 01:04:29,500 dan dapat digunakan dalam sisa kode sumber dalam fungsi Anda. 1142 01:04:29,500 --> 01:04:33,790 Jadi saya menduga bahwa Anda akan mulai melihat penjaga ini juga. 1143 01:04:33,790 --> 01:04:36,670 Dan berhati-hati itu. 1144 01:04:36,670 --> 01:04:46,270 >> Jadi hanya melihat beberapa lainnya hal, hak ini di sini adalah apa, 1145 01:04:46,270 --> 01:04:53,377 Menurut Anda, hanya berdasarkan apa kami berbicara tentang sebelum? 1146 01:04:53,377 --> 01:04:56,650 >> AUDIENCE: Pikirkan itu akan dijalankan dalam daftar? 1147 01:04:56,650 --> 01:04:59,100 >> DAN Armendariz: Jadi yang dekat. 1148 01:04:59,100 --> 01:05:02,360 Ini adalah fungsi yang kita mendefinisikan. 1149 01:05:02,360 --> 01:05:07,240 Dan kita memasukkan fungsi yang sebagai argumen untuk fungsi ini di sini. 1150 01:05:07,240 --> 01:05:09,120 >> AUDIENCE: [tidak terdengar] jika tidak nihil. 1151 01:05:09,120 --> 01:05:11,470 Jadi itu dalam daftar, kan? 1152 01:05:11,470 --> 01:05:15,450 >> DAN Armendariz: Jika kesalahan tidak nihil, sehingga is-- jadi saya harus gulir. 1153 01:05:15,450 --> 01:05:18,060 Nah, mari kita lihat, saya bisa benar-benar gulir ke sini. 1154 01:05:18,060 --> 01:05:23,161 kesalahan argumen yang sedang dilewatkan ke fungsi anonim ini. 1155 01:05:23,161 --> 01:05:24,410 Ini adalah fungsi anonim. 1156 01:05:24,410 --> 01:05:25,480 Tidak memiliki nama. 1157 01:05:25,480 --> 01:05:29,850 Tapi kita menerima ketiga argumen, data, respon, dan kesalahan. 1158 01:05:29,850 --> 01:05:33,590 Dan itu akan kembali batal, sehingga itu tidak akan kembali apa-apa. 1159 01:05:33,590 --> 01:05:37,910 Dan ini adalah isi fungsi itu. 1160 01:05:37,910 --> 01:05:41,961 Dan kemudian kita memiliki akses dalam yang fungsi untuk masing-masing argumen ini. 1161 01:05:41,961 --> 01:05:45,650 1162 01:05:45,650 --> 01:05:48,679 >> Jadi itu angin puyuh tur bahasa. 1163 01:05:48,679 --> 01:05:50,470 Tapi saya harap dengan ini, mudah-mudahan saat Anda mengambil 1164 01:05:50,470 --> 01:05:54,490 lihat beberapa tutorial khusus untuk pengembangan iOS dengan Swift, 1165 01:05:54,490 --> 01:05:57,481 terutama jika Anda pergi ke Apple pengembang web page-- 1166 01:05:57,481 --> 01:05:59,980 mereka memiliki banyak benar-benar baik tutorial untuk Anda mulai. 1167 01:05:59,980 --> 01:06:05,010 Tapi mudah-mudahan saja jam ini berbicara tentang sintaks sendiri telah memberikan 1168 01:06:05,010 --> 01:06:08,760 Anda cukup untuk memulai dengan itu. 1169 01:06:08,760 --> 01:06:12,950 >> Kami akan posting semua sumber ini Kode di website seminar 1170 01:06:12,950 --> 01:06:17,800 sesegera mungkin, dan juga slide sehingga Anda memiliki referensi bagi semua orang. 1171 01:06:17,800 --> 01:06:20,530 Tapi keberuntungan dengan proyek Anda. 1172 01:06:20,530 --> 01:06:23,640 Dan terima kasih semua sangat banyak untuk datang. 1173 01:06:23,640 --> 01:06:26,990 >> [TEPUK TANGAN] 1174 01:06:26,990 --> 01:06:28,026