>> [MUSIC PLAYING]
>> DAN AMRMENDARIZ: Semua orang, selamat datang ke seminar CS50,
iOS App Pembangunan dengan Swift.
Aku Dan Armendariz, dan aku pembimbing yang ilmu komputer di Harvard.
>> Dan satu jam berikutnya akan menjadi tur angin puyuh sebanyak barang
tentang topik ini seperti yang kita bisa cocok.
Saya akan posting semua kode sumber Anda akan melihat hari ini online.
Kita mungkin tidak dapat benar-benar pergi atas segala sesuatu
bahwa aku bahwa aku menunjukkan Anda pada saat ini.
Tapi setidaknya mudah-mudahan melalui komentar-komentar dari kode sumber,
Anda akan dapat mencoba untuk mencari tahu apa yang sebenarnya terjadi untuk hal-hal
bahwa kita tidak cukup sampai ke.
>> Secara keseluruhan, struktur bicara hari ini akan sebagai berikut.
Kami akan mulai melakukan beberapa dasar sintaks dengan bahasa Swift,
pergi ke beberapa lebih maju sintaks dari bahasa Swift.
Karena bahasa benar-benar modern dan
memiliki banyak tingkat tinggi fitur, hal-hal yang kita tidak
terlihat di C seluruh CS50, atau bahkan beberapa bahasa lainnya
bahwa kita sudah mulai menggunakan di CS50 seperti PHP,
jadi saya akan harus mencoba untuk memperkenalkan juga beberapa topik yang
terkait dengan bahasa tingkat tinggi Anda mungkin tidak melihat secara mendalam dalam CS50,
tetapi Anda akan melihat nanti kelas ilmu komputer.
Jadi itu akan menjadi erat dikemas jam.
Dan jangan ragu untuk membiarkan saya tahu jika Anda memiliki pertanyaan.
Jadi jika Anda tertarik dalam melakukan pengembangan
dengan Swift, atau benar-benar setiap pengembangan aplikasi iOS,
ada beberapa persyaratan.
Pertama-tama, Anda harus menggunakan Mac, berjalan di contoh
bahwa kita akan menggunakan hari ini, versi yang relatif baru OS
X. Dalam hal ini, saya sedang menjalankan X 10.5.
Anda dapat berjalan 10.11 jika Anda ingin.
Tapi segala sesuatu yang Anda akan lihat adalah melibatkan Xcode 7 dan kemudian,
yang memiliki versi terbaru Swift, yang merupakan Swift 2.0.
Ini sebenarnya cukup perbedaan penting.
Banyak sintaks memiliki berubah cukup signifikan
dalam beberapa kasus dari Swift 1.0, yang dirilis tahun lalu,
untuk Swift 2.0, yang baru saja keluar musim gugur ini.
Jadi kita akan menunjukkan Swift 2.0.
Banyak hal-hal yang Anda mencari secara online
ketika Anda mencoba untuk mendapatkan tambahan informasi tentang berbagai hal,
Anda mungkin ingin secara eksplisit mencari Swift 2
daripada Swift sekadar tua untuk membuat Pastikan bahwa Anda mendapatkan sintaks yang benar.
>> Bahkan, ini umumnya benar.
Ada sejumlah cepat pembangunan terjadi dalam bahasa Swift
sejak Apple merilis itu, saya pikir apa, sudah sedikit lebih dari satu tahun
sekarang.
Dan hal yang telah berubah dramatis pada waktu itu.
Dan jadi jangan frustrasi jika, ketika Anda mencari di sekitar
untuk topik tentang Swift atau bagaimana untuk mencapai sesuatu yang menggunakan beberapa contoh kode
atau sesuatu yang tidak benar-benar bekerja pada Swift 2.0.
Pastikan Anda mencari khusus untuk versi yang
mencoba untuk meminimalkan efek yang berbeda versi dan orang-orang macam hal.
>> Saya akan mencoba untuk menunjukkan hanya beberapa hal yang berbeda dengan versi yang lebih tua.
Tapi itu sesuatu yang harus diperhatikan.
Itu mungkin akan menjadi salah satu sakit kepala terbesar
bahwa Anda akan memiliki dengan Swift adalah menemukan contoh kode yang lebih tua, bahkan hanya
oleh beberapa bulan, mencoba untuk menggunakan dalam proyek modern Anda lebih.
Dan itu hanya cukup tidak bekerja.
Anda mendapatkan kesalahan kompilator, sintaks kesalahan, segala macam hal gila.
Jadi hanya bersabar dengan itu, dan mudah-mudahan Anda akan
memiliki pengalaman yang cukup bagus dengan keseluruhan Swift.
>> Sekarang Anda dapat benar-benar join-- dan saya berharap kita sebenarnya masih memiliki ini year-- ini
CS 50 Apple app tim pengembangan, yang
akan memungkinkan Anda untuk menginstal aplikasi apapun yang Anda buat pada perangkat iOS Anda.
Jadi kita lihat URL ini jika Anda tertarik untuk melakukan itu.
>> Jadi hanya beberapa hal tentang Swift sendiri.
Ini adalah bahasa yang dikompilasi.
Tapi Anda akan melihat bahwa beberapa fitur yang kita gunakan
memungkinkan untuk digunakan juga dalam sedikit seperti ditafsirkan cara juga.
>> Banyak sintaks yang dipinjam dari C. Ini didasarkan dan ditulis dalam C.
Dan jadi kita akan melihat bahwa ada banyak takeaways
dari pengetahuan yang ada dari C yang kita dapat port untuk Swift.
>> Tapi ada hal-hal yang membuatnya sangat berbeda dari C.
Hal ini sangat sangat diketik.
Ada manajemen memori otomatis.
Anda tidak akan harus menggunakan malloc atau di mana saja gratis.
Ini dirancang untuk umum.
Jadi dengan kata lain, Anda dapat menggunakannya dalam segala macam konteks, dari Apple Perhiasan
untuk iPhone semua jalan sampai ke OS X, dan bahkan beberapa server, bahkan beberapa scripting.
Tapi kita akan melihat bahwa dukungan untuk scripting
tidak cukup ada belum seperti itu dalam bahasa lain.
Jadi kemungkinan besar Anda akan menggunakan ini secara eksklusif untuk pembangunan
di Mac atau iPhone Anda.
>> Dan memiliki banyak fitur modern.
Dan banyak hal-hal ini hal-hal yang kita akan mencoba untuk mengatasi hari ini,
tetapi juga topik kita yang terus terang, kita bisa mencurahkan seluruh program.
Bahkan, CS 51, yang merupakan ditawarkan semester berikutnya,
berfokus banyak tentang topik ini yang dijelaskan di bawah ini.
Sehingga Anda dapat menghabiskan seluruh semester memahami hal-hal ini.
Tapi kami akan mencoba untuk mendapatkan melalui mereka
setidaknya cukup bahwa Anda dapat memahami apa
terjadi ketika Anda melihat di program Swift
dan dapat hack cara Anda melalui itu untuk tugas akhir.
>> Sekarang salah satu cara terbaik yang dapat Anda mendapatkan informasi tambahan tentang ini
terus terang saja melalui Apple disediakan dokumentasi untuk Swift.
Ada banyak API yang tersedia.
Dan ini adalah dasar rumah yang baik untuk Anda untuk mencari, hal-hal tertentu yang Anda
ingin melakukan dengan API melibatkan iOS.
Jika Anda ingin menggunakan kamera untuk Misalnya, Anda dapat mulai mencari di sini,
dan juga menggunakan Google dan Stack Melimpah seperti biasa.
>> Pertanyaan ini sebelum kita melompat ke kanan?
Baiklah.
Mari kita lanjutkan.
>> Jadi pertama, saya memiliki jumlah contoh file.
Dan aku akan mencoba untuk melangkah melalui mereka relatif cepat.
Ini adalah file Hello World untuk Swift.
Ini sangat sederhana.
Ada cara yang lebih komentar daripada ada kode aktual.
Perhatikan kode aktual di bagian paling bawah pada baris 14.
Dikatakan cetak.
Dan maka itu panggilan fungsi.
Kami melewati ke dalamnya string disebut Hello CS50.
Perhatikan bahwa tidak ada titik koma.
Perhatikan bahwa tidak ada int main.
Ada tidak ada yang cruft yang kita miliki dengan C.
Ketika kita menggunakan Swift dengan cara ini, yang hanya ditulis dalam sebuah file teks
dan disimpan di komputer saya, maka Saya dapat mengkompilasi dan menjalankannya.
>> Perhatikan bahwa di sini aku tidak menggunakan IDE CS50.
Ini mengasumsikan bahwa saya berjalan dan bahwa aku pada OS X,
dan bahwa saya telah Xcode sudah terinstal pada mesin ini agar ini
untuk benar-benar berfungsi.
Tapi ini hanya sebuah file teks biasa bahwa kita kemudian dapat mengkompilasi dan mengedit.
Jadi mari kita lihat bagaimana ini benar-benar bekerja.
Bagaimana jika saya ingin melakukan kompilasi?
1.swift swiftc.
Setelah beberapa saat, itu akan melihat bahwa kita memiliki sekarang
disusun ini ke file bernama 1.
Dan sekarang kami telah dicetak CS50 kami, Aplikasi Hello World kita bukan.
>> Perhatikan satu hal lain baik adalah bahwa secara default,
kita tidak perlu masukan a / n untuk mencetak baris baru.
Secara default, fungsi cetak dalam Swift akan mencetak baris baru untuk Anda.
Anda dapat melewati tambahan opsional parameter untuk menceritakannya untuk tidak melakukannya.
Tapi Google untuk informasi lebih lanjut tentang itu.
Secara default, ia akan melakukan garis cetak.
>> Baiklah, jadi mari kita lanjutkan kemudian ke hal-hal lain.
Jadi bagaimana kita bisa benar-benar mendefinisikan variabel?
Kita bisa melakukan itu menggunakan salah satu dari dua metode.
Dan salah satu yang saya ingin memberitahu Anda tentang pertama adalah definisi membiarkan ini.
Dan ini penting karena secara efektif
apa yang kita lakukan adalah mendefinisikan konstan.
Kita akan membuat sebuah variabel, atau lebih tepatnya disebut nama konstan,
menyediakan untuk itu beberapa data-- di hal ini, string Dan.
Tapi dengan menggunakan membiarkan ini kata kunci, kita katakan
bahwa ini variable-- atau lagi constant-- disebut
Nama tidak akan pernah berubah.
Ini akan menjadi berubah sepanjang durasi program ini
atau seluruh durasi konteks
bahwa variabel yang tersedia.
>> Ini benar-benar penting bahwa ketika Anda memiliki beberapa data yang tidak
akan mengubah dalam program Anda, dan Anda akan melihat berbagai contoh
tentang ketika kita ingin menggunakan biarkan versus sintaks lainnya,
penting bahwa Anda menggunakan membiarkan sedapat mungkin karena notifikasi ini
bahasa bahwa itu adalah tidak akan berubah,
dan itu benar-benar dapat melakukan banyak optimasi
untuk meningkatkan kecepatan dan keamanan program Anda.
Dan oleh keamanan, maksud saya tidak membiarkan itu kecelakaan dengan kesalahan gila
bahwa kita mungkin terbiasa melihat di C.
>> Maka kita bisa menggunakan interpolasi string untuk merangkum ini dalam string.
Jadi kita bisa melihat dalam hal ini garis cetak, mencetak halo,
dan kemudian menggunakan backslash parens terbuka, dan kemudian nama variabel saya,
dalam hal ini konstan, menutup kurung.
Saya pada dasarnya kemudian menempatkan isi dari variabel disebut nama ini
dalam string dan kemudian mencetak hasilnya ada.
>> Ada satu perubahan lain ke file ini yang yang saya miliki, di bagian paling atas,
dimasukkan ke dalam garis peristiwa, yang pada dasarnya hanya menentukan
yang saya ingin menggunakan Interpreter Swift, yang
berarti bahwa saya tidak lagi harus mengkompilasi program khusus ini.
Aku hanya bisa menjalankannya seperti script sendiri.
Tapi ini, dalam hal ini, di belakang adegan yang disusun dan kemudian
yang dijalankan.
Itu hanya terlihat oleh kita.
>> Baiklah, jadi mari kita lanjutkan.
Jadi ada sedikit tipu yang baru saja terjadi sebelumnya.
Saya menunjukkan bahwa saya bisa mendefinisikan konstan.
Dan saya bisa memberikan beberapa data untuk melakukannya.
Tapi dalam kasus ini, perhatikan bahwa saya tidak sebenarnya menentukan jenis data
bahwa itu adalah.
Dan itu karena compiler, Swift bisa
menyimpulkan jenis data hanya berdasarkan pada data yang saya dimasukkan ke dalamnya.
Karena ia tahu bahwa dengan mengevaluasi ini variabel di sini, ini data yang benar
di sini, ia tahu bahwa itu adalah sebuah string.
Dan nama konstan ini karena itu akan menjadi string juga.
>> Tapi kita juga bisa eksplisit tentang jenis yang
kita akan gunakan untuk konstanta atau variabel
dengan menggunakan sintaks ini instead-- biarkan String nama usus sama
Dan, yang dalam hal ini berarti kita akan menentukan disebut nama konstan.
Ini akan menjadi tipe String.
Dan nilai akan menjadi Dan.
Sekarang cara lain yang kita dapat membuat variables--
dan ini adalah variabel bisa berubah, yang berarti bahwa kita, pada kenyataannya, akan
untuk mengubah isinya kadang-kadang dalam durasi konteks
bahwa variabel yang defined-- kami menggunakan kata kunci var bukannya membiarkan.
Tapi sekali lagi, secara default, kecuali Anda tahu Anda perlu memanipulasi data itu,
mencoba untuk menggunakan membiarkan untuk peningkatan kinerja.
>> Dalam hal ini, saya kemudian bisa tentukan jenis data
yang kita harapkan menjadi bagian dalam variabel baru yang disebut label.
Ini akan menjadi string.
Dan kita akan kemudian menyatukan dua string bersama-sama, string halo,
dan string diwakili oleh variabel, atau lebih tepatnya nama konstan.
>> Jadi ini bagus karena ini agak PHP seperti di kita itu
memiliki sangat mudah penggabungan string.
Kami tidak harus secara otomatis menggunakan apapun manajemen memori
untuk meningkatkan ukuran dan melakukan apapun hal-hal lucu di sana.
Ini bekerja seperti yang kita benar-benar harapkan.
>> Baiklah, pertanyaan tentang hal ini?
>> Sekarang alasan lain yang kita perlu Anda memiliki kemampuan
untuk dapat menentukan apa jenis variabel data
karena kadang-kadang kita tidak ingin menginisialisasi variabel
dengan beberapa data di titik definisi.
Jadi dalam hal ini, katakanlah bahwa saya ingin memulai memasukkan
beberapa nilai menjadi sebuah buku kelas.
Yah aku tahu bahwa salah satu variabel yang saya ingin menjadi
akan menjadi kelas bisa berubah.
Dan kita juga tahu bahwa kita ingin menjadi integer.
Tapi mungkin kita belum memiliki kelas yang tersedia.
>> Dalam Swift, Anda harus mendefinisikan jenis data
yang berhubungan dengan variabel atau biarkan konstan
sebelum Anda benar-benar bisa menggunakan variabel itu.
Karena itu sangat diketik, Anda harus mengasosiasikan tipe
dengan variabel-variabel ini.
>> Jadi dalam hal ini, jika saya sudah tidak benar diinisialisasi pertama dengan beberapa nilai,
maka saya perlu memberitahu Swift apa Saya berharap tipe data menjadi.
Dan itu akan tetap jenis data yang sama
sepanjang sejarah program ini.
>> Sekarang Anda mungkin tergoda sesegera Saya telah menciptakan variabel kelas ini
dan asalkan sebuah integer 100, sekarang jika saya
ingin mencoba untuk menggabungkan string dengan bilangan bulat itu,
mungkin akan tergoda untuk masih menggunakan bahwa operator penggabungan string
seperti yang kita lakukan hanya beberapa baris sebelumnya.
Tapi sayangnya, ini akan benar-benar tidak
bekerja, karena Anda dasarnya melakukan
operasi pada dua jenis yang berbeda.
>> Sekarang ini sangat berbeda dari yang lain bahasa seperti PHP yang benar-benar
bodoh loosey dengan semacam mereka jenis.
Mereka hanya suka, ya, apapun, aku tidak peduli.
Beri aku satu jenis, dan mungkin aku akan melakukan hal yang benar.
>> Dalam hal ini, Swift adalah sangat ketat tentang jenis
bahwa Anda berurusan dengan.
Operator penjumlahan ini atau operator Rangkaian
memiliki dasarnya beberapa mungkin pilihan yang berbeda.
Anda dapat melakukan penjumlahan dengan bilangan bulat, atau Anda
dapat melakukan penggabungan string, dan mungkin beberapa hal lain juga.
Tetapi jika operator yang tidak mengakui apa yang ada di kedua sisi itu,
atau lebih tepatnya kombinasi dari mereka dua jenis, tidak apa itu mengharapkan,
maka itu akan menyebabkan kegagalan.
>> Jadi dalam hal ini, apa artinya untuk memiliki string ditambah integer?
Nah dalam konteks ini, kita mungkin ingin
untuk melakukan operasi string concatenation.
Tapi tentu saja komputer tidak memiliki semacam konteks.
Dan jadi kita perlu memberikan bahwa informasi tambahan
untuk membiarkannya tahu apa itu adalah yang ingin kita lakukan.
>> Jadi dengan kata lain, fakta bahwa Swift sangat diketik
berarti Anda harus melakukan sedikit pekerjaan tambahan
untuk mendapatkannya untuk mengoperasikan cara yang Anda inginkan.
Tapi sebagai hasilnya, lebih aman.
Dan sekali Anda telah mengambil memperhitungkan jenis-jenis,
hal hanya terus terang mulai bekerja dengan baik.
>> Jadi dalam hal ini, kita kemudian akan melakukan penggabungan string
dengan secara eksplisit pengecoran integer ke string
dengan membungkusnya dalam modal S String fungsi,
dan kemudian menggunakan penggabungan string operator untuk memodifikasi variabel label kami,
dan kemudian mencetaknya.
>> Sejauh ini bagus?
Baiklah, mari kita lanjutkan.
>> Sekarang ada berbagai data jenis yang bisa kita gunakan di Swift.
Seperti yang telah Anda menjadi terbiasa, kita bisa membuat array bisa berubah.
Dan array hanya dapat berisi jenis tunggal.
>> Jadi dalam hal ini, kita akan membuat sebuah array bisa berubah bilangan bulat, yang
kita akan memanggil nilai, dan kita akan dapat untuk menyimpan bahwa dalam braket persegi ini
Format seperti yang Anda sudah dewasa terbiasa dalam berbagai bahasa lain.
Tapi perhatikan bahwa di sini kami mendefinisikan beberapa hal.
nilai adalah variable-- bisa berubah kita tidak menggunakan let kata kunci.
Jadi itu berarti kita dapat memodifikasi isi array ini.
Ini adalah tipe Array Int, dan kita bisa mengatakan bahwa
berdasarkan ini kurung di sini.
>> Sekarang salah satu hal yang menyenangkan tentang ini adalah bahwa kita
memiliki akses ke banyak informasi tambahan
tentang array hanya menggunakan beberapa titik sederhana notasi.
Jadi misalnya, grades.count memberikan kepada kami
jumlah item yang ada dalam array, yang kemudian kita dapat mengakses cukup
mudah hanya menggunakan yang notasi titik.
>> Jika Anda ingin menambahkan tambahan item untuk array ini,
Anda tidak dapat melakukan gaya PHP di mana Anda hanya secara eksplisit mendefinisikan,
pada indeks tertentu, beberapa nilai Anda ingin menyisipkan.
Sebaliknya, gunakan append yang metode dalam tipe array
untuk menambahkan item, 95, untuk daftar ini.
>> Jadi sekarang array ini memiliki berikut contents-- 100, 0, 90, 85.
Dan sekarang kita sudah ditambahkan 95 itu juga.
>> Ada cara lain kita dapat menambahkan hal-hal.
Anda benar-benar dapat menggunakan operator penjumlahan,
yang akan ditafsirkan sebagai operasi array yang append.
Dan Anda kemudian dapat menambahkan lain array, yang isinya adalah 70 dan 80,
array itu.
Jadi sekarang kita memiliki isi variabel ini
grades-- 100, 0, 90, 85, 95, 70, dan 80.
Ini hanya sintaksis kecil yang menyenangkan gula yang Swift memberikan kepada kami.
>> Jadi jika kita ingin menjumlahkan nilai, kami mungkin
akan ingin beralih atas setiap item dalam lingkaran ini.
Dan kita miliki, di Swift, gagasan dari untuk loop seperti yang Anda harapkan.
Tapi cara yang kami mengindikasikan rentang sedikit berbeda.
Jadi dalam hal ini, untuk Singkatnya segala sesuatu, kita akan
akan membuat sementara variabel yang disebut sum agar kita
untuk mempertahankan jumlah ini.
>> Dan perhatikan untuk kami lingkaran konstruksi di sini.
Untuk indeks 0 .. <grade.count.
Jadi konstruksi ini, 0 .. <grades.count adalah operasi rentang di mana kita berada
mengatakan bahwa kita akan membuat berbagai bilangan bulat dari 0 sampai
untuk tetapi tidak termasuk grades.count.
Jadi ini akan menjadi 0, 1, 2, 3, 4, 5, sampai namun banyak satu
sebelum grades.count.
>> Jadi ini berbeda dari bagaimana kita akan digunakan untuk loop biasanya
di mana Anda akan memiliki beberapa indeks variabel, mengaturnya sama dengan 0 pada awalnya,
dan kemudian mengintegrasikan bahwa sampai beberapa nilai kurang dari jumlah item
dalam array itu.
>> Jadi ada modifikasi untuk ini, sebenarnya,
yang memungkinkan kita untuk dengan mudah mengatur berbagai jenis rentang.
Jika Anda mengubah kisaran ini ke tiga titik, 0 ... grade.count,
ini merupakan kisaran 0 untuk grades.count inklusif,
yang berarti bahwa jumlah itu juga kemudian dimasukkan dalam kisaran tersebut.
>> Tapi ini sangat berguna untuk hal-hal ini dengan tepat,
ketika kita harus melakukan iterasi lebih lingkaran
karena mereka indeks yang nol diindeks, seperti yang kita lihat dalam bahasa lain
demikian juga.
Pertanyaan ini untuk loop?
>> Jadi ada definisi implisit variabel indeks ini,
Nilai yang dimulai pada 0, dan terus pada setiap iterasi loop
meningkat 1 sampai titik yaitu sebesar grades.count,
di mana titik, loop dibatalkan.
>> Perhatikan bahwa dalam string interpolasi sini,
kita benar-benar bisa melakukan beberapa sederhana manipulasi terhadap nilai-nilai.
Jadi indeks ditambah 1 akan benar-benar melakukan penjumlahan nilai yang
karena indeks adalah, dalam hal ini, integer.
Dan pada saat itu, itu akan kemudian dikonversi menjadi string
dan diinterpolasi ke dalam string ini di sini, dan dicetak seperti yang kita harapkan. .
>> Dan hal yang menyenangkan tentang array di sini adalah
bahwa kita juga mampu memiliki nilai mengambil dan nilai-nilai pengaturan
menggunakan notasi braket persegi sebagai yang kami lihat dalam bahasa lain juga.
>> Baiklah, jadi dari sini, kita sekarang menghitung jumlah kami semua nilai kami.
Sekarang semacam berikutnya langkah logis akan
untuk melakukan operasi pembagian untuk menemukan keluar rata-rata dari mereka nilai.
Tapi sesuatu yang penting disini yang terjadi yang
adalah bahwa jumlah ini mungkin integer.
Tapi kita harus melakukan beberapa semacam divisi ganda.
Dan ini akan menjadi sangat penting ketika
kita ingin melakukan operasi ini, karena apa yang kita katakan
adalah bahwa kita harus benar-benar melakukan pembagian pada dua ganda.
Dan lagi, karena Swift sangat sangat diketik,
kita harus secara eksplisit mengatur semua item untuk ganda sebelum kita benar-benar
melakukan operasi itu.
>> Jadi dalam rangka bagi kita untuk melakukan pembagian ganda,
itu tidak cukup untuk hanya satu dari barang-barang menjadi ganda.
Keduanya harus menjadi ganda agar cepat
untuk memastikan bahwa ini adalah apa yang ingin kita lakukan.
Jadi kita akan kemudian secara eksplisit typecast jumlah yang telah dihitung di atas kita
dan hitungan nilai untuk ganda, dan kemudian melakukan bahwa operasi dan menyimpan
yang menjadi variabel baru ini, atau lebih tepatnya konstan baru ini disebut-rata,
yang akan memiliki jenis, Anda bayangkan?
Ganda, ya.
Jadi dalam hal ini, kita tidak harus menentukan itu
karena bisa disimpulkan dari operasi apa jenis rata Data
akan.
Dan Swift umumnya cukup baik tentang mampu menyimpulkan jenis.
>> Apakah Anda ingin melihat ini menjalankan, atau aku bisa pindah?
Saya ingin terus.
Pertanyaan pada salah ini?
Besar.
>> Sekarang kita akan mulai untuk mendapatkan fungsi mendefinisikan stuff-- baik,
dan beberapa jenis lainnya yang unik untuk Swift bahwa Anda tidak
dilihat dalam bahasa lain sampai titik ini,
tetapi mereka hadir di lain bahasa yang Anda mungkin menemukan di kemudian hari.
Jadi pertama jika Anda ingin untuk menentukan fungsi,
Anda mendefinisikan dengan kata yang funky fungsi, dan kemudian nama fungsi,
dan kemudian di kurung, argumen bahwa Anda ingin fungsi yang menerima.
Argumen juga harus specify-- generally--
juga harus menentukan jenis data yang mereka, kecuali mereka dapat disimpulkan.
Dan kita akan melihat bahwa sedikit peringatan hanya sedikit.
>> Jadi dalam hal ini kita memiliki fungsi yang disebut printGradeCount.
Kita akan menerima variable-- atau lebih tepatnya dalam hal ini,
constant-- yang disebut gradebook.
Dan itu akan menjadi ketik array bilangan bulat.
Sekarang ada sesuatu yang benar-benar penting di sini
bahwa saya ingin kau mengerti.
Itulah yang secara default, argumen ini yang masukan untuk fungsi ini
didefinisikan dengan let kata kunci implisit, yang berarti bahwa saya tidak dapat memodifikasi ini
variabel gradebook sini.
Dan itu semacam masuk akal, karena Anda lewat data dalam.
Dan Anda mungkin tidak ingin diubah dari bawah Anda.
Hal ini dimungkinkan untuk secara eksplisit menyebutkan bahwa ini adalah variabel dengan menempatkan
var kata kunci di sini.
Tapi itu gotcha bahwa kita sudah orang melihat telah dilakukan di masa lalu
adalah bahwa mereka menganggap bahwa itu akan menjadi variabel ketika, pada kenyataannya, itu
adalah konstan.
>> Baiklah, jadi di sini kemudian, dalam hal ini, kita tidak menentukan jenis pulang.
Kami akan menunjukkan kepada Anda bagaimana melakukan yang hanya dalam beberapa saat.
Tapi perhatikan bahwa di sini kita memiliki hanya sederhana jika kondisi.
Jika gradebook adalah kosong, yang dalam hal ini
hanya milik bilangan bulat ini array, maka kita mencetak sesuatu.
Kalau tidak kita melakukan sesuatu yang lain.
>> Cukup sederhana sejauh ini saya pikir.
Tapi berhenti saya jika Anda memiliki pertanyaan.
>> Sekarang fungsi ini, rata-rata, juga mengambil beberapa argumen, atau lebih tepatnya satu argumen,
yang merupakan gradebook, dan kali ini akan kembali jenis ganda.
Karena komputasi rata-rata dan itu
akan benar-benar kembali bahwa Rata-rata dihitung dengan garis panggilan.
>> Dalam hal ini, kita tentukan Jenis kembali setelah panah.
Dan ini mungkin merasa agak aneh pada awalnya.
Anda telah tumbuh terbiasa untuk pengaturan pengembalian
ketik sebelum nama fungsi.
Tapi jika Anda berpikir tentang hal ini dalam hal matematika,
seperti ketika Anda memiliki matematika yang mendefinisikan fungsi,
Anda memiliki fungsi dengan beberapa input, dan menghasilkan output.
Dan itulah yang ini seharusnya meniru.
Dan ada beberapa bahasa lain yang memiliki sintaks mirip juga,
tapi mungkin tidak ada yang Anda pernah melihat di CS50.
Tapi masih tidak bingung dengan hal itu.
Panah berarti apa yang sedang terjadi dikembalikan dalam kasus ini.
OK, jadi bagaimana kita akan untuk menghitung rata-rata ini?
Nah, jika gradebook kosong, baik maka kami
akan kembali 0, yang mungkin cara yang masuk akal untuk mengobati ini.
Aku tidak tahu, mari kita datang kembali ke dalam sedikit.
Ini mungkin tidak benar-benar menjadi cara yang wajar
untuk menghitung rata-rata jika kita memiliki gradebook kosong.
>> Maka kita hanya akan melakukan penjumlahan kami.
Perhatikan bahwa di sini kita benar-benar memiliki versi alternatif dari
untuk loop, yang memungkinkan kita untuk beralih lebih setiap satu item dalam array
dan menempatkan setiap elemen menjadi variabel sendiri.
Dengan menentukan untuk kelas di gradebook, apa yang kita katakan
adalah bahwa kita akan secara implisit membuat konstan baru yang disebut
kelas yang akan mewakili setiap item unik dalam gradebook
setiap kali bahwa untuk loop iterates.
Jadi yang pertama kalinya itu dijalankan, kelas akan
menjadi item pertama dalam gradebook.
Kedua kalinya itu akan menjadi Item kedua, seterusnya dan sebagainya
sampai gradebook memiliki habis itu sendiri elemen.
Kemudian kita akan dapat menyimpulkan bahwa kelas ke variabel penjumlahan kami
dan kembali rata-rata kami seperti yang telah kita lihat sebelumnya.
OK, pertanyaan?
Iya nih?
AUDIENCE: Saya punya dua pertanyaan.
Nomor satu, hipotetis, bisa Anda menjalankan bilangan bulat yang satu ini?
Tidak harus menjadi ganda, benar?
DAN AMRMENDARIZ: Dapatkah Anda mengulangi pertanyaan itu?
AUDIENCE: Dapatkah saya lakukan integer sebagai rata-rata?
DAN AMRMENDARIZ: Dapatkah Anda melakukan integer sebagai rata-rata?
Jadi kembali integer rata bukannya ganda?
>> AUDIENCE: Return-- Anda memiliki itu sekarang di bawah.
DAN AMRMENDARIZ: Di sini, kembali 0,0?
AUDIENCE: Ya, hanya kembali 0.
Sehingga akan baik 80 atau 85, tetapi tidak 85,2.
>> DAN AMRMENDARIZ: Jadi dalam hal ini, jadi ada beberapa cara yang berbeda
untuk menjawab itu.
Biarkan saya jawab mereka dalam rangka.
Jadi jika saya hanya membuat kembali ini 0, 0 adalah nilai integer.
Dan sehingga akan menyebabkan Jenis kesalahan untuk kasus ini
karena mengharapkan ganda tapi kemudian kembali integer.
Jika saya ingin kembali integer, saya bisa.
Saya bisa mengatur jenis kembali int, return 0 sini,
dan tidak melakukan pembagian ganda.
Tapi kemudian kita akan melakukan pembagian integer.
Dan jadi kita kemudian tidak akan mendapatkan rata-rata yang kita mungkin harapkan.
Tapi ya kita bisa memodifikasi jenis dengan cara itu.
>> AUDIENCE: Dan kedua, Anda memiliki satu ganda di atas.
Tapi di bawah, ketika Anda lakukan kembali ganda ganda,
yang sudah otomatis kembali format yang ganda.
Mengapa Anda masih perlu mendefinisikannya dengan panah di atas dengan ganda?
>> DAN AMRMENDARIZ: Jadi dalam hal, ini adalah bagian
dari the-- sehingga untuk mengulang pertanyaan, karena itu tersirat dari pengembalian
sebenarnya jenis di sini, apa jenis ini adalah, kita harus eksplisit dengan Swift
tentang apa yang kita ingin kembali dari fungsi ini
sehingga ketika ia melakukan mengetik memeriksa, itu dapat memastikan
bahwa apa yang kita telah benar-benar ditulis di bawah benar-benar sesuai dengan yang.
Jadi itu semacam cek dengan diri sendiri semacam situasi.
Tapi ada are--
>> AUDIENCE: [tidak terdengar] panah?
>> DAN AMRMENDARIZ: Ada kasus ketika kita dapat menentukan bahwa kita bisa secara implisit
mengatur jenis kembali.
Tapi dalam kasus ini, saya tidak berpikir bahwa akan bekerja.
Ada beberapa sintaks lainnya bahwa kita akan lihat nanti.
>> Baiklah, jadi sumber ini kode adalah sedikit berbeda
karena ini mem-parsing argumen dari fungsi yang kita panggil.
Mari saya tunjukkan cara kerjanya sebelum kita benar-benar pindah
untuk beberapa hal menarik yang terjadi di Swift.
>> Jadi dalam hal ini, jika saya hanya menjalankan ini kode, perhatikan bahwa apa yang dilakukannya
is-- sementara, itu jenis memberi saya kesalahan aneh.
Saya harus lulus itu beberapa bilangan bulat sebagai argumen baris perintah.
Jadi mari kita lihat, 150 dan 80, dan tekan Enter untuk mencari tahu apa itu benar-benar melakukan.
Ini menerima masing-masing nilai-nilai ini sebagai bilangan bulat.
Ini memasukkan mereka ke dalam gradebook a.
Dan kemudian itu melakukan bahwa perhitungan rata-rata
dan keluaran yang seperti yang kita harapkan.
>> Tapi jelas ada sesuatu yang terjadi pada dengan sesuatu menolak ini
sesuatu yang integer.
Seperti yang mungkin Anda ingat dari ketika kami berurusan dengan argumen baris perintah
di C dan bahasa lain, pertama Item 0-th dalam argumen baris perintah
daftar adalah nama dari perintah bahwa kita benar-benar dieksekusi.
Jadi dalam hal ini, aku hanya perulangan atas semua argumen baris perintah.
Tapi aku tidak melakukan apapun mewah periksa untuk melewatkan yang pertama.
Aku hanya eksplisit atau implisit Saya memeriksa yang jenis ini
adalah bilangan bulat sebelum aku benar-benar melakukan perhitungan ini.
>> Dan itu dasarnya apa yang terjadi di sini.
Untuk setiap argumen di argumen proses ini,
Aku akan melakukan beberapa pemeriksaan.
Dan dalam hal ini, saya akan mencoba untuk mengkonversi pertama
bahwa argumen menjadi integer oleh melakukan sebuah typecast eksplisit,
karena, pada input, string dan tidak pada kenyataannya integer.
>> Tapi ini adalah jenis sintaks aneh, jika membiarkan kelas sama Int (argumen).
Apa yang sebenarnya terjadi sini sangat
penting untuk Anda menggunakan Swift.
Ini menggunakan apa disebut tipe opsional.
>> Jadi fungsi ini, Int (argumen), mengembalikan bukan hanya integer, tapi kembali
apa yang disebut integer opsional.
Dan jadi ini adalah semacam jenis di atas tipe.
Anda dapat semacam membayangkannya seperti itu kembali seperti paket.
Dan ketika Anda membuka bahwa paket, itu baik
memiliki integer, yang hasilnya, atau itu sama sekali tidak ada di dalamnya sama sekali.
Dan ini berguna sebagai pemeriksaan kesalahan mekanisme, karena dalam kasus ini
kita dapat mengetahui, apakah ini jenis konversi sukses?
Jika itu, maka itu sebenarnya akan memiliki integer dalam.
Jika tidak itu akan memiliki beberapa nilai yang akan kita sebut nihil, yang
merupakan perwakilan dari tidak ada bilangan bulat sama sekali.
Ini benar-benar mewakili apa-apa.
>> Dan jadi ini jika konstruksi memungkinkan kita untuk membuka bungkusan paket itu,
yang opsional mengikat.
Dan jika kita mampu membukanya bahwa paket dan menemukan integer dalam,
maka apa yang kita katakan di sini adalah bahwa kita kemudian akan
memungkinkan nilai yang harus ditetapkan dalam konstan ini disebut kelas.
Dan ini bagian dari jika pernyataan, bagian atas jika pernyataan
akan berjalan, karena itu unwrap berhasil.
>> Jika kebetulan yang ada kesalahan mungkin
dalam jenis konversi eksplisit ini dari string ke integer, mungkin
itu nilai ABC misalnya.
Dan itu benar-benar tidak akan untuk mengkonversi ke integer.
Maka akan kembali nihil, yang bukan merupakan bilangan bulat.
Dan ini jika pernyataan juga kemudian gagal.
kelas tidak akan ada karena tidak memiliki konten integer.
Dan itu akan berjalan ini pun blok sebagai gantinya.
Iya nih?
>> AUDIENCE: Nil adalah N-I-L?
DAN AMRMENDARIZ: nil adalah N-I-L, ya.
>> Jadi ini mungkin salah satu hal yang paling sulit tentang Swift,
terutama ketika Anda berada di gulma pada sebuah aplikasi iOS
dan Anda benar-benar mencoba untuk melakukan beberapa pengembangan di sana.
Ini akan berteriak pada Anda tentang opsional.
Ini akan meminta Anda untuk tanda tanya dan tanda seru.
Tapi setelah Anda mengetahui out-- jika Anda mencurahkan waktu untuk mencari tahu
apa yang terjadi dengan jenis opsional, Anda akan menghemat banyak sakit kepala
Anda mencoba untuk menulis sebuah aplikasi di Swift.
>> Ini sebenarnya fitur yang sangat kuat.
Dan Anda hanya harus mengambil kata-kata saya untuk itu untuk saat ini.
Tapi kita akan melihat konstruksi ini dan beberapa orang lain seperti itu
di beberapa kode sumber lain yang kami akan menunjukkan hanya sedikit.
>> Apakah ada pertanyaan awal di sini?
Jadi takeaway penting adalah bahwa Jenis opsional adalah semacam metatype a.
Itu baik memiliki nilai, dan jika tidak, maka
mungkin akan memiliki nilai yang terkait dengan itu, atau tidak memiliki nilai apapun,
dan diwakili oleh nihil.
Sisa ini mungkin seperti yang Anda harapkan.
>> Jadi mari kita jalan sampai kesulitan lagi.
Dan kali ini, mari kita lihat beberapa tipe data lain yang benar-benar ada.
Salah satunya adalah kamus, yang merupakan sangat mirip dengan Python kamus.
Ini agak mirip dengan tabel hash di C. Ini pada dasarnya adalah pemetaan kunci
di mana kunci dapat string.
Dan ketika Anda melihat orang-orang kunci, kunci-kunci akan memiliki nilai.
Sehingga tidak cukup array yang itu, tapi sebaliknya, terkait lebih erat
untuk peta hash atau tabel hash.
>> Mari kita lihat bagaimana hal ini seharusnya bekerja sebelum kita benar-benar
masuk ke kode sumber itu sendiri.
Jika saya hanya menjalankan ini, tidak benar-benar terjadi.
Ini memberitahu saya bahwa saya mengharapkan beberapa parameter dari jenis berikut.
Jadi aku akan memberikan kepada itu beberapa nama masalah set,
sehingga pset0, mungkin aku punya 100.
Dan pset1, aku punya 5.
Dan kemudian pada ujian, saya melakukan dengan sangat baik dan mendapat 30.
Dan oops, aku memukul spasi di sini.
>> Ketika saya tekan Enter, Anda dapat melihat ia melakukan beberapa perhitungan.
Dikatakan gradebook tiga nilai, pset1, pset0, ujian.
Dan gradebook memiliki Rata-rata tertentu.
Jadi sekali lagi, kami bekerja dengan ide gradebook ini,
tapi kami akan terus iterasi dengan kompleksitas fungsi kita.
>> Jadi di awal, kami hanya akan membuat fungsi yang
bertanggung jawab untuk mencetak penggunaan.
Dan ada keluar ini fungsi yang hanya akan
paksa keluar dari aplikasi.
Ini bukan sesuatu yang Anda akan gunakan dalam aplikasi iOS.
Ini hanya, dalam kasus ini, dengan argumen baris perintah.
Berikutnya kita akan mulai bergerak menuju Xcode.
Tapi ini khusus untuk perintah Program gaya garis di Swift.
>> Mari kita lihat beberapa hal-hal yang menarik di sini.
Mari kita lihat, hanya beberapa hal menarik lagi mungkin
adalah bahwa dalam fungsi saya mencetak jumlah nilai,
Anda mungkin ingat bahwa saya punya daftar yang dari pset1 items--, pset0, dan ujian.
Anda dapat benar-benar cepat dan dengan mudah melakukan ini
dengan mengambil gradebook, yang merupakan kamus yang memiliki kunci dan nilai-nilai.
Cari semua kuncinya adalah melalui metode dot kunci di sini,
dan kemudian menggunakan joinWithSeparator ini, yang kemudian akan mengambil semua tombol
bahwa kita telah mengetik, pset1-- atau Maaf, pset0, pset1, dan exam--
dan menggabungkan mereka bersama-sama menggunakan koma dan spasi
untuk membuat satu string panjang.
Bergabung dengan operasi ini hanya fenomenal berguna dalam berbagai konteks.
Dan sehingga joinWithSeparator ini.
>> Dan ini adalah salah satu hal yang berubah dari Swift 1 ke Swift 2.
Ada digunakan untuk menjadi Python style-- jika Anda
akrab dengan Python-- Python sebuah Gaya bergabung metode pada string.
Tapi itu tidak lagi kasus di Swift 2.
Anda ingin menggunakan ini jika Anda ingin untuk menggabungkan array barang
bersama-sama dengan string.
>> Jadi mungkin kemudian di kami pembahasan rata-rata sebelum,
itu membuat sedikit lebih masuk akal bagi kita untuk mengatur fungsi-rata
menjadi opsional ganda lebih dari sekedar ganda eksplisit.
Karena kami memiliki yang kondisi yang tidak biasa di mana,
bagaimana jika gradebook sebenarnya tidak memiliki nilai-nilai di dalamnya?
Apa yang harus pengembalian rata-rata?
>> Yah mungkin di C Anda akan melakukan sesuatu
seperti memberikan nilai sentinel, seperti 0,0, atau mungkin angka negatif,
atau sesuatu hanya mewakili kenyataan bahwa ada beberapa kondisi kesalahan
dan Anda mungkin tidak benar-benar memiliki kemampuan untuk menghitung rata-rata itu.
Nah keindahan menentukan sebuah Jenis opsional akan melakukan itu.
Dan aku sekarang mengatakan semua kata-kata ini, tapi ini benar-benar tidak menggunakan optionals.
Tapi kita akan melihat bahwa hanya menit di mana kita dapat mengatur rata
menjadi tipe data opsional sehingga jika itu benar-benar kembali beberapa data, kemudian
kami akan kembali data tersebut.
Kalau tidak kita akan kembali nihil, mengatakan bahwa ini
tidak memiliki perhitungan yang berarti.
>> Mari kita beralih ke sesuatu yang lain.
Jadi dari sini, kami sudah melihat semua contoh ini di baris perintah.
Tapi benar-benar apa yang akan Anda harus berurusan dengan adalah Xcode.
Dan salah satu hal yang menyenangkan tentang Xcode adalah, dan khususnya di Swift,
adalah bahwa kita memiliki ini Hal yang disebut Playground.
Dan Playground adalah tidak sama sekali sebuah aplikasi iOS.
Tetapi memungkinkan Anda untuk bereksperimen dengan Swift dalam cara yang sangat mudah.
Anda dapat mengetik semua kode Anda.
Ini baik sintaks disorot di sini.
Bila Anda membuat file baru, ia akan meminta Anda jika Anda ingin membuat sebuah Playground.
Tapi hal yang baik tentang Playground adalah bahwa di sebelah kanan jendela,
apakah itu benar-benar menunjukkan Anda Output dari kode Anda.
Jadi jika saya gulir ke bawah, kita bisa melihat apa yang output dari berbagai baris kode
sebenarnya terjadi menjadi.
>> Jadi dalam hal ini, kita akan mengubah arah hanya sedikit
dan berbicara tentang sesuatu yang benar-benar penting untuk ini cara tingkat tinggi
bahwa Swift beroperasi, dan itu adalah ide ini penutupan.
Dan Anda mungkin pernah melihat ini sedikit di JavaScript.
Bagi Anda yang berada di CS50, penutupan
sangat populer, cara yang sangat baik untuk melakukan hal tingkat tinggi dalam bahasa modern.
Tapi itu juga agak sulit untuk membungkus kepala Anda sekitar pertama kalinya.
Jadi jika Anda melihat ini pertama kalinya, itu OK.
Hanya melihat kode sumber dan melihat jika Anda dapat mencari tahu di rumah.
>> Jadi dalam hal ini, mari kita mengatakan bahwa kita ingin membuat banyak eksponen
dengan beberapa nilai tetap.
Jadi dalam hal ini saya bisa membuat fungsi.
Aku akan menyebutnya kekuatan 2 tujuan yang satu-satunya dalam hidup
adalah untuk mengambil beberapa masukan dan double itu, dan mengembalikan nilai itu.
Perhatikan bahwa di sini saya menerima satu jenis data.
Ini akan menjadi variabel yang disebut x.
Ini tipe ganda.
Dan aku akan kembali Double sini.
Dan aku hanya akan melakukan sangat, terus terang, cukup
cara naif menggandakan nilai ini.
Dan aku akan menunjukkan mengapa ini berguna hanya dalam satu detik.
>> Perhatikan bahwa di sini kita memiliki kisaran ini lagi. sesuatu di 1, dot
dot dot, 2, yang berarti bahwa lingkaran ini akan berjalan dua kali.
Tapi ini merupakan variabel dummy.
Itu berarti aku tidak benar-benar akan menggunakan variabel yang mana saja
dalam lingkaran ini.
Aku hanya ingin baris ini kode untuk menjalankan dua kali,
tanpa perlu tahu nilai kisaran tersebut.
>> Jadi dalam hal ini saya sedang menjalankan hasil kali x dua kali, yang pada dasarnya
berarti bahwa aku mengkuadratkan nilai ini.
Dan ini terjadi pada bekerja seperti yang kita harapkan.
Kekuatan 2, melewati nilai 2.0 memberi kita output 4.
3.2 bekerja untuk 10,24.
>> Sekarang kita bisa melakukan yang sama Hal untuk kekuatan 3.
Tapi sekarang berubah hanya jangkauan.
Untuk variabel dummy dalam 1 melalui 3, kalikan 3 kali,
dan melakukan hal yang sama.
>> Jadi ini mungkin merasa sedikit dibikin.
Tapi ada yang penting hal di sini yang
adalah bahwa melihat ini dua fungsi, ada
hanya satu hal yang berbeda, yang merupakan nilai ini dalam kisaran.
Segala sesuatu tentang kedua fungsi, kekuatan 3 dan kekuatan 2,
, pada kenyataannya, identik karena mereka bekerja dengan cara yang sama.
>> Jadi pada titik ini, sedikit bel alarm harus pergi.
Mudah-mudahan apa yang Anda katakan, Anda tahu, ini terasa sedikit
seperti duplikasi usaha.
Mungkin ada cara yang saya akan dapat merangkum semua ini
dan memberikan fungsi atau membuat fungsi yang
tidak persis apa yang saya inginkan tanpa perlu mengetik secara eksplisit.
Dan ini adalah apa daya dari penutupan memungkinkan kita untuk melakukan.
Jadi mari kita lihat ini.
Dan aku akan menghabiskan beberapa menit ini, karena ini
cukup penting bagi Swift.
Kita melihat ini sepanjang waktu.
Kita akan mendefinisikan fungsi.
Ini akan disebut powerOf.
Ini akan menerima parameter yang disebut y tipe Int.
Tapi lihatlah jenis kembali.
Jenis kembali adalah, dalam kurung, Double panah ganda.
Yang berarti bahwa fungsi ini, fungsi powerOf ini,
adalah kembali fungsi.
Yang menerima Double dan mengembalikan ganda.
Sehingga mungkin terdengar agak gila, tapi mari kita scroll ke bawah sedikit
dan melihat untuk melihat apa yang terjadi.
Kami berada di dalam fungsi powerOf ini.
Kami menciptakan fungsi baru disebut exponentiator,
tetapi tidak peduli apa itu.
>> Perhatikan bahwa ini memiliki nilai input x.
Dan itu adalah mengambil dalam dua dan mengembalikan ganda.
Dan ini adalah kode yang sama bahwa kita lihat di atas, kecuali bahwa nilai 2
atau nilai 3, yang atas terikat di kisaran itu,
telah diganti dengan Nilai ini y, yang
adalah parameter awal fungsi powerOf kami.
Dan pada titik ini, kita kembali exponentiator.
Kami kembali fungsi.
>> Ini semacam seperti pikiran bertiup sedikit.
Tapi mari kita bayangkan apa yang terjadi ketika saya memanggil fungsi ini powerOf
dan lulus ke dalamnya beberapa nilai seperti 2.
Apakah ini berarti bahwa Saya sekarang memiliki nilai
2 untuk y, yang berarti bahwa nilai ini y dalam fungsi exponentiator ini
akan menjadi nilai yang 2.
Tapi aku kembali ini fungsi exponentiator.
>> Jadi perhatikan apa Swift bilang aku telah dibuat dalam hal ini.
biarkan persegi definisi, itu fungsi yang menerima dua
dan mengembalikan ganda.
Saya telah menciptakan sebuah fungsi bahwa kotak sesuatu
menggunakan mekanisme ini di sini.
Dan benar-benar apa yang terjadi adalah bahwa itu kembali fungsi ini
exponentiator, tetapi nilai ini y dibungkus di dalamnya.
Dan jadi sekarang setiap kali saya menggunakan ini variabel atau konstanta ini disebut
persegi, itu akan berperilaku sebagai fungsi.
Dan jadi saya kemudian dapat memanggil variabel yang seperti aku akan memanggil fungsi,
dan masuk ke sebuah nomor, seperti dalam kasus ini 3.
Dan saya kemudian akan persegi nilai ini.
Jadi 3 akan kuadrat kemudian menjadi 9, seperti yang kita bisa lihat di sini.
>> Benar-benar gila, tapi ini sekarang memungkinkan saya kesempatan
untuk membuat fungsi powerOf lainnya.
Seperti saya dapat mengatakan, OK, baik sekarang saya ingin untuk membuat fungsi baru, powerOf (3),
dan menyimpan yang menjadi konstan disebut kubus.
Dan sekarang kubus akan menjadi fungsi terpisah yang kemudian akan
mengambil beberapa nilai sebagai masukan dan kubus yang nilai seperti yang kita bisa lihat di garis bawah
sini.
kubus 2 akan menghasilkan 8.
>> Hal mudah-mudahan cukup rapi.
Anda belum pernah melihat ini sebelumnya.
Saya mendorong Anda untuk melihat ke dalam penutupan dan menyelidiki ini sedikit lebih.
Ini hal-hal yang benar-benar kuat kita melihat banyak dalam JavaScript dan beberapa bahasa lainnya.
Ini benar-benar penting untuk memahami API juga
bahwa kita akan mendapatkan hanya satu detik.
Iya nih?
>> AUDIENCE: Ketika Anda melakukan powerOf (2), kurung, dan kemudian
kurung lain, input-- lain Anda pada dasarnya mengganti alun-alun.
DAN AMRMENDARIZ: Jadi melihat pada baris yang terakhir di sini.
Hal ini sebenarnya benar-benar mungkin untuk melakukannya chaining seperti yang Anda disarankan.
Jadi powerOf (5) berarti bahwa kita akan memiliki exponentiator dari 5 di sini.
Jadi ini pada dasarnya akan menjadi hal yang sama seperti 4 dengan daya kelima,
karena kami telah membuat sebuah exponentiating berfungsi untuk kekuatan kelima,
dan kami melewati ke yang berfungsi nilai 4.
Dan kita mendapatkan nilai yang yang kita harapkan, 1024.
AUDIENCE: Dan itu bukan nama, sehingga membuatnya lebih mudah
membaca, alun-alun apapun.
>> DAN AMRMENDARIZ: Benar, persis.
Jadi sebelum saya hanya menaruhnya menjadi konstan di sini jadi
yang membuatnya mudah untuk menggunakan nama itu.
Iya nih?
>> AUDIENCE: Dalam konteks ini powerOf, itu bagian
dari bahasa pemrograman sebagai lawan dengan cara Anda
memikirkan powerOf di [tak terdengar]?
DAN AMRMENDARIZ: Jadi dalam kasus ini, powerOf
hanyalah nama fungsi yang saya didefinisikan di sini.
Sehingga tidak melekat untuk bahasa itu sendiri,
tetapi sebaliknya, itu hanya fungsi yang memiliki
nama itu karena saya memberikan nama itu.
Ada pertanyaan lain?
Baiklah.
>> Sekarang ini adalah besar.
Tetapi Anda tidak akan melihat banyak fungsi penutupan yang
yang seperti ini di mana Anda mendefinisikan, dalam dari satu fungsi, fungsi lain.
Dan Anda dapat melakukannya.
Tapi itu semacam tidak benar-benar diperlukan, kan?
Seperti mengapa saya mendefinisikan ini fungsi yang disebut exponentiator
dan kemudian segera mengembalikannya.
Mengapa tidak bisa aku hanya segera kembali fungsi ini?
>> Dan pada kenyataannya, ini justru ide di balik konsep yang disebut
fungsi anonim, di mana fungsi anonim tidak benar-benar
memiliki nama karena mereka tidak perlu memiliki satu.
Dan dalam hal ini, di 7B, kita dapat menemukan tepat itu.
Ini semua kode yang sama, melakukan hal yang persis sama,
tapi sekarang kita sudah berubah sedikit sehingga bahwa fungsi powerOf ini segera
mengembalikan fungsi.
Perhatikan bahwa setelah kembali, ada braket keriting terbuka.
Ini mengharapkan masukan ini ganda.
Ini mengharapkan bahwa output ganda.
Dan kemudian di kunci memisahkan kode itu sendiri.
Jadi ini adalah fungsi anonim.
Itu tidak benar-benar memiliki nama, sedangkan sebelum itu disebut exponentiator.
Tapi seperti yang kita lihat, hanya benar-benar tidak mengacu pada exponentiator
di luar fungsi tersebut.
Jadi itu tidak masalah.
Jadi fungsi anonim ini disebut karena tak bernama,
tapi itu masih digunakan dalam konteks kode ini.
>> Pasangan yang berikutnya saya akan terus mudah-mudahan
meniup pikiran Anda sedikit.
Kita dapat menyederhanakan ini bahkan lebih.
Karena seperti cerdik disebutkan sebelumnya,
mungkin kita benar-benar tahu, oleh menyimpulkan dari kode ini, apa
output dari kode ini akan menjadi.
Dan pada kenyataannya, dalam fungsi anonim ini, kita sebenarnya dapat menyimpulkan jenis data.
>> Jadi dalam satu ini, kita tidak lagi perlu secara eksplisit mendefinisikan
jenis data yang menjadi input dan output dari fungsi ini
untuk beberapa alasan.
Salah satunya adalah bahwa kita telah ditetapkan, sampai pada prototipe dari fungsi melampirkan,
jenis data ini anonim fungsi harus input dan output.
Dan dari yang lain, kami dapat menyimpulkan dari kode
di sini bahwa kita menerima masukan yang tipe ganda
dan mengembalikan ganda.
>> Perhatikan bahwa di sini kita tidak secara eksplisit didefinisikan nama-nama argumen
bahwa fungsi ini menerima.
Dan kita melihat kita dapat merujuk parameter menggunakan $ 0, $ 1,
seterusnya dan sebagainya, tergantung pada jumlah parameter yang digunakan
dalam fungsi ini.
>> Ini adalah sesuatu yang Anda akan melihat banyak adalah braket keriting ini terbuka
definisi diikuti oleh $ 0, dan kemudian beberapa operasi,
dan kemudian braket keriting tertutup.
Itulah fungsi anonim yang melakukan operasi ini.
Ini memiliki parameter ini di mana itu jenis adalah tereka.
Bahwa parameter pertama adalah $ 0.
Dan beberapa operasi terjadi pada itu $ 0.
>> AUDIENCE: Jadi tanda dolar berarti parameter pada dasarnya,
dan 0 berarti yang pertama?
DAN Armendariz: Itu benar.
Jadi tanda dolar pada dasarnya berarti parameter, dan 0 berarti yang pertama.
Tetapi bekerja secara khusus di hal ini di mana saya belum bernama
argumen dalam fungsi anonim saya.
>> AUDIENCE: Apakah Perl atau sesuatu yang harus tanda dolar ini, dolar 0 di sana?
DAN Armendariz: Apakah yang, aku minta maaf?
AUDIENCE: Apakah Perl memiliki dolar ini 0, dolar 1--
DAN Armendariz: Saya tidak terlalu akrab dengan Perl,
tapi apa yang mendefinisikan variabel PHP berdasarkan tanda-tanda dolar.
Dan mungkin ada beberapa bahasa yang memiliki fitur seperti ini.
Bahkan, Swift meminjam banyak fitur seperti ini
dari banyak bahasa lain.
Kita melihat petunjuk Python di dalamnya.
Definisi jenis tampaknya datang dari OCaml.
Dan kami memiliki hanya sekelompok seluruh barang dari banyak bahasa yang berbeda.
Itulah salah satu yang bagus hal tentang Swift
adalah bahwa dibutuhkan banyak yang terbaik ide dari sekelompok bahasa
dan sendok sepatu mereka semua bersama-sama menjadi satu bahasa yang super.
Bahkan, jika Anda mengizinkan saya untuk terus meniup pikiran Anda,
jadi kami sudah melakukan semua ini.
Kami mungkin dapat menyederhanakan ini sedikit bit dengan menyadari bahwa, tentu saja,
Swift memiliki exponentiating fungsi built in.
Jika saya mengimpor Darwin, yang hanya perpustakaan yang
fitur fungsi yang disebut pow ini, sekarang Saya dapat menyederhanakan kekuatanku fungsi
menjadi berikut.
Itu akan kembali fungsi anonim ini.
>> Tapi melihat bagaimana sederhana ini sekarang.
Ini adalah fungsi anonim yang adalah menerima beberapa jenis data,
dan itu akan menjadi salah satu Argumen khusus,
direferensikan di $ 0 yang adalah tipe ganda.
Hal ini akan kembali jenis ganda.
Tapi pernyataan kembali sekarang implisit.
>> Dan itu adalah gaya yang tepat ini yang sangat, sangat lazim di Swift,
seluruh tempat.
Kita akan melihat ini semua waktu di Swift.
Jadi aku menunjukkan semua ini untuk Anda karena sintaks ini.
Hal ini sangat umum untuk melihat, yang berarti
adalah fungsi anonim yang melakukan
beberapa operasi pada argumen ini.
Dan ada pengembalian implisit.
Jadi itu benar-benar hal yang sama bagi kita untuk mengatakan ini, di sini.
>> Karena keriting ini braket adalah fungsi,
kami melakukan operasi ini pada argumen pertama.
Kita akan kembali itu.
Tapi kembali luar ini kembali bahwa seluruh fungsi,
bahwa fungsi anonim seluruh bahwa kita baru saja dibuat.
Ada pertanyaan lain?
Baiklah, saya tidak tahu apakah kalian siap untuk ini,
tapi kita bisa pergi lebih gila lagi dengan Swift.
Anda siap?
OK, ini sangat bagus.
>> Sekarang kita benar-benar memiliki kemampuan untuk, di Swift, karena cara modular
dan bagaimana berbasis protokol itu, untuk mendefinisikan operator panik kita sendiri.
Seperti dalam kasus ini, kami tidak punya Operator untuk exponentiation-- baik,
untuk melakukan kekuatan sesuatu.
Tapi aku bisa, di Swift, mendefinisikan baru operator yang tidak tepat itu.
Jadi dalam hal ini ada sekelompok sintaks sini.
Dan aku akan memungkinkan Anda untuk melihat itu di rumah ketika Anda melihat ini.
Tapi kita mendefinisikan infiks ini operator, **, yang kemudian memungkinkan kita,
dengan mendefinisikan apa yang Fungsi ** sebenarnya
tidak, untuk menerima tangan kiri sisi dan sisi kanan,
dan kemudian untuk mengembalikan eksponen yang sisi kiri ke sisi kanan.
>> Dan jadi sekarang semua saya tiba-tiba telah menciptakan penghitung baru.
Jadi 2 ** 3 berarti 2 pangkat ketiga.
[PIKIRAN SUARA BLOWING] ini oleh sendiri harus membuat Anda menjadi seperti,
OK, sekrup C. Aku akan Swift sepanjang jalan.
Ini bagus.
Ini cukup fantastis.
>> Meskipun ini adalah contoh yang bagus.
Tapi saya tidak pernah di luar dari contoh ini benar-benar
didefinisikan operator saya sendiri.
Tapi tetap, itu menunjukkan banyak kekuatan Swift
dan mengapa ini sebenarnya benar-benar sangat dingin.
Baiklah?
AUDIENCE: Jika Anda mendefinisikan operator Anda sendiri,
bagaimana Anda tahu Anda tidak sengaja mencoba dan membuat operator yang
di suatu tempat di C, seperti tersembunyi di suatu tempat di Swift,
seperti satu jelas bahwa Anda mungkin tidak terlihat sebelumnya.
>> DAN Armendariz: Jadi jika Anda mencoba untuk menentukan operator Anda sendiri,
ada risiko mendefinisikan salah satu dari operator yang ada.
Yang masuk ke tingkat detail yang Saya tidak berpikir kita punya waktu untuk pergi.
Tapi itu adalah risiko.
Dan itu sebenarnya alasan mengapa Saya tidak menggunakan simbol sisipan, yang
ketika kita sedang mengetik daya, kita biasanya menggunakan 4 sedikit sisipan 5 atau sesuatu
seperti itu, hanya ketika kita berada Gchatting teman atau apa pun.
Tapi dalam kasus itu, yang benar-benar akan menyebabkan tabrakan.
Dan jadi aku menghindari itu hanya karena Saya kebetulan tahu dalam hal ini
bahwa yang akan menyebabkan tabrakan itu.
>> Baiklah.
Sekarang sayangnya, untuk tujuh menit terakhir,
Saya harus terus bertiup pikiran Anda sedikit.
Jadi memungkinkan saya untuk menunjukkan Anda beberapa hal lain juga.
>> Kami telah menunjukkan Anda ide ini memiliki fungsi-fungsi anonim,
Penutupan ini yang memungkinkan Anda untuk jenis lulus fungsi sekitar.
Anda dapat kembali mereka.
Anda dapat memanipulasi mereka.
Anda dapat melakukan segala macam hal gila.
>> Tapi satu hal lain yang terjadi menjadi berguna
adalah kemampuan untuk, sebagai lawan untuk kembali fungsi-fungsi
dalam fungsi, untuk lulus fungsi sebagai parameter ke fungsi lain.
Anda mungkin berpikir dengan baik mengapa di Bumi akan saya ingin melakukan sesuatu seperti itu?
>> Nah, mari kita mengatakan bahwa saya ingin untuk mengambil Operator ini yang saya
bekerja sangat keras untuk membuat dan menerapkan untuk sekelompok angka yang berbeda
dalam array.
Jadi dalam hal ini saya memiliki sebuah array integers-- 1, 4, 7, 2, 5, 10, 56.
Dan saya ingin melipatgandakan mereka semua.
Cara yang kita akan biasanya melakukannya adalah dengan hanya menulis
sederhana untuk loop yang iterates atas mereka semua
dan melakukan semacam operasi persegi atas mereka,
memasukkan nilai-nilai baru ke dalam baru variabel, atau lebih tepatnya, array baru di sini.
Dan nilai output Hasilnya kemudian semua orang array,
atau lebih tepatnya semua orang elemen sekarang kuadrat.
>> Dan kita bisa melakukan hal yang sama hal untuk cubing itu,
tapi bel alarm sedikit harus pergi off
mengatakan bahwa mungkin ada beberapa cara yang kita akan
dapat menyederhanakan ini sedikit.
Dan sebenarnya ada.
Bagaimana jika kita bisa menciptakan fungsi yang memungkinkan kita
untuk menerima, sebagai predator, fungsi?
Jadi dalam hal ini, mengambil melihat argumen ini.
Kita akan menerima daftar ganda.
Dan kemudian kita akan untuk menerima fungsi
dalam variabel yang disebut f yang akan untuk mengambil Double dan mengembalikan ganda.
Dan seluruh keluaran seluruh fungsi ini
disebut mapper akan mengembalikan array disebut ganda.
>> Apa ini maka akan memungkinkan saya untuk lakukan adalah untuk iterate atas daftar itu
dan melakukan hal yang sama, tapi sekarang menerapkan fungsi yang pada setiap
dari nilai-nilai individu dalam daftar itu.
Jadi saya tidak benar-benar tahu apa f adalah.
Tidak masalah bagi saya.
Tapi selama dibutuhkan dalam ganda, melakukan beberapa operasi di atasnya,
dan kemudian mengembalikan Ganda, saya kemudian akan
mampu memetakan fungsi yang melintasi setiap elemen dalam daftar.
>> Dan jenis pemrograman disebut fungsi tatanan yang lebih tinggi,
di mana kita melewati fungsi sekitar sebagai parameter
dan melakukan hal-hal dengan fungsi.
Ini semacam seperti mengambil semua ini ide-ide yang telah kita pelajari di CS50
dan membawa mereka semacam dari ke tingkat berikutnya.
Dan ini semua barang gaya CS51.
Dan jadi kami akan pergi secara mendalam lebih di kelas seperti itu.
>> Tapi ini juga penting di sini karena kita
melihat banyak fungsi yang digunakan di Swift
yang pada dasarnya tidak ini, di mana kita memiliki
beberapa nomor, beberapa array angka.
Kita akan lulus bahwa array ke mapper kami.
Dan kita juga akan melewati beberapa fungsi, yang
kita sudah didefinisikan di sini.
Ini akan menjadi persegi.
Dan kita akan kemudian persegi semua angka-angka
dan menyimpan yang menjadi hasil ini di sini.
>> Jadi hal ini kita telah menetapkan kami fungsi sendiri disebut mapper.
Tapi hal yang tepat ini, pada kenyataannya, dibangun ke Swift.
Ada berbagai fungsi disebut peta.
Ada fungsi peta, ada mengurangi fungsi,
dan ada fungsi filter, yang pada dasarnya menerapkan fungsi
untuk setiap elemen tunggal dalam daftar memodifikasi mereka dalam beberapa cara.
>> AUDIENCE: Jadi karena Anda mengubah data ke format lain
melalui sebuah function--
DAN Armendariz: Benar.
Ya, sehingga fungsi bahwa kita menerima
adalah mengubah data dalam beberapa cara.
Dalam hal ini, kami baik mengkuadratkan itu, atau kami cubing itu,
atau benar-benar, kita bisa melakukan tidak ada operasi di atasnya sama sekali.
>> Tapi mari saya tunjukkan bagaimana ini kemudian akan terlihat dalam praktek.
Dan lagi, saya menjalankan sedikit waktu. jadi saya tidak
akan dapat pergi ke semua dari kode sumber di sini secara rinci.
Tapi saya mendorong Anda untuk melakukan itu.
Kami akan posting secepat mungkin setelah pembicaraan ini.
>> Tetapi jika anda melihat ini, asumsikan bahwa kita memiliki daftar nomor,
array angka dalam ini variabel yang disebut nomor.
Kemudian kita ingin melakukan ini Operasi filter pada angka-angka.
Jadi filter yang lebih tinggi fungsi agar
menerima array dan juga fungsi.
Dan pada setiap elemen dalam array, ia melakukan fungsi itu.
>> Jika itu kembali fungsi benar, itu membuat item.
Jika fungsi yang mengembalikan palsu, itu membuang item.
Dan kemudian ia mengembalikan daftar yang kemudian membuat semua
dari barang-barang yang telah disaring.
>> Jadi dengan kata lain, ini adalah ide yang sama, gradebook.
Kita mungkin memiliki berbagai nilai ke nomor ini nilai disebut.
Bisa 100, dan 70, dan 40, seterusnya dan sebagainya.
Apa filter ini dilakukan adalah pemberitahuan bahwa ini adalah bahwa gula sintaksis
untuk fungsi anonim.
Ini adalah fungsi anonim mengatakan bahwa parameter bahwa aku menerima
akan menjadi, jika lebih besar dari 70,
maka ini akan kembali benar, yang berarti bahwa item yang akan disimpan dalam filter ini.
Jadi mari kita menjadi sedikit lebih konkret tentang hal ini.
Jika saya memiliki array ini angka dan terdiri dari 100, 70, dan 40,
Saya melakukan filter ini operasi pada masing-masing dari mereka.
Sehingga pertama adalah nilai ini dari 100.
100 lebih besar dari atau sama 70 adalah benar, yang
berarti bahwa 100 disimpan di ini salinan baru array ini.
70 juga melewati.
Tapi 40 tidak.
Jadi apa yang dikembalikan di passingCount adalah array dari elemen 100 dan 70--
100, koma, 70.
Mereka hanya dua item yang disimpan.
Dan alasan saya cepat pergi melalui banyak semacam ini agar tinggi
hal-hal yang karena ini adalah bahwa umum hal yang akan Anda lihat di Swift cantik
sering, adalah melakukan beberapa operasi menggunakan sintaks fungsi anonim ini.
>> Ada beberapa hal menarik.
Switch adalah benar-benar kuat di Swift, Maksud saya seperti gila, gila kuat.
Anda dapat menggunakan switch, dan Anda benar-benar dapat menerapkannya
untuk rentang, yang merupakan jenis gila, dan melakukan hal-hal mewah seperti itu.
>> Tapi dalam beberapa menit terakhir, Saya ingin langsung beralih cukup jauh
dan menunjukkan contoh spesifik bagaimana kita dapat membuat di app iOS menggunakan Swift.
Jadi, ketika Anda melakukan ini, Anda harus mengambil
terlihat at-- di Apple dokumentasi, mereka
memiliki banyak tutorial benar-benar baik untuk membuat aplikasi pertama Anda.
Dan saya mendorong Anda untuk melakukan itu karena mereka membawa Anda
melalui semua langkah dari apa yang tepat untuk klik untuk membuat aplikasi iOS.
>> Tapi di sini kita memiliki aplikasi iOS ini.
Dan itu adalah aplikasi yang cukup sederhana benar-benar.
Jika saya menjalankan ini, biarkan saya menunjukkan Anda seperti apa.
Semua itu pada dasarnya dilakukannya itu menarik dari internet file JSON
bahwa saya telah disimpan di server.
Dan bahwa file JSON mendefinisikan gambar yang memungkinkan
saya untuk kemudian siklus melalui, pada saya app, gambar dari web server saya.
>> Jadi saya miliki di sini getNextImage.
Ini beban gambar dari internet, dan kemudian menampilkannya di layar.
>> Sehingga cukup sederhana.
Tetapi tujuan di sini adalah untuk menunjukkan Anda bagaimana kita bisa menggabungkan hal-hal
dari beberapa minggu terakhir dari CS50 ke dalam aplikasi iOS yang sebenarnya.
Dengan kata lain, mungkin salah satu hal yang akan Anda ingin lakukan
adalah memiliki sebuah aplikasi iOS yang dapat menarik data dari internet
dan menunjukkan pengguna beberapa informasi.
Yang sepenuhnya titik kode ini sumber di sini.
>> Jadi ada banyak yang bisa dikatakan tentang bagaimana melakukan pengembangan iOS yang sebenarnya.
Ada banyak sintaks gila bahwa kita belum melihat belum cukup
seperti kelas, apa kelas sebenarnya.
Kami sebagian besar dapat mengabaikan bahwa untuk saat ini.
>> Tapi perhatikan bahwa kita telah terkandung dalam hal ini berbagai hal
bahwa kita sudah melihat seperti fungsi yang memiliki nama tertentu.
Dan ketika kita memberikan mereka fungsi nama yang benar
yang diharapkan oleh iOS, pada kenyataannya ini terasa sedikit ajaib.
Tetapi ketika Anda membuat aplikasi iOS, ada
adalah nama fungsi spesifik yang disebut oleh telepon itu sendiri
sebagai aplikasi sedang loading untuk mencoba untuk membuat proses yang benar-benar
menjalankan aplikasi Anda.
Jadi sekali lagi, ada banyak hal yang saya harus mengabaikan sini agar kita
membicarakan hal ini secara khusus.
Tapi saya mendorong Anda untuk melihat mungkin seminar iOS lain, tetapi juga beberapa
dari online tutorial yang melakukan pekerjaan yang lebih baik menggambarkan
informasi yang spesifik.
>> Tapi kita bisa melihat beberapa hal yang yang menarik dari kode sini.
Perhatikan bahwa kita memiliki jika pernyataan.
By the way, salah satu yang penting hal tentang jika pernyataan
adalah bahwa kurung di sekitar Ekspresi Boolean adalah opsional.
Tapi kurung kurawal tidak opsional, tidak peduli betapa sedikit atau banyak baris kode
Anda memiliki dalam sebuah pernyataan jika.
Anda tidak dapat memiliki jika pernyataan tanpa kurung kurawal di Swift.
>> Dan ini, baik, semacam konyol.
Tapi ada alasan historis untuk itu.
Ini seharusnya untuk menyelamatkan Anda dari diri Anda sendiri.
Seperti ini misalnya, Anda tidak bisa menghilangkan kurung kurawal sekitar yang
jika pernyataan.
Mereka yang sebenarnya diperlukan.
Jadi saya mendorong Anda untuk Lihatlah ini.
Tapi ada satu lagi membangun yang saya inginkan
menunjukkan tentang Swift yang baru untuk Swift 2.0 dibandingkan
untuk versi Swift, yang berikut ini.
Mari kita lihat di mana aku taruh di sini?
>> Jadi dalam fungsi ini disebut fetchJSON, fungsi ini
bertanggung jawab untuk menarik bahwa JSON file dari URL, yang kebetulan
akan berjalan pada IDE CS50 saya.
Aku baru saja mulai Apache, menaruh file JSON saya di sana,
dan aku bisa kemudian tarik yang data dari internet menggunakan
fungsi ini dan URL ini, yang disediakan oleh telepon.
Ini disediakan oleh perpustakaan yang Anda gunakan ketika
Anda melakukan beberapa pengembangan aplikasi iOS.
>> Perhatikan di sini bahwa ada yang tidak biasa ini membangun sintaksis disebut penjaga.
Dan benar-benar semua ini di Swift adalah cara untuk memverifikasi
bahwa beberapa hal memiliki telah dipenuhi sebelum Anda
melanjutkan dengan sisa fungsi.
Jadi saya bisa memiliki, menggunakan jenis ini opsional,
Saya bisa menemukan URL dengan menjalankan fungsi NSURL ini
dan menyimpan yang menjadi URL konstan, dan kemudian memeriksa
untuk melihat apakah URL itu nihil, karena akan kembali jenis opsional.
Dan jika itu nihil, maka saya akan mencetak kesalahan dan kemudian kembali.
>> Tapi sebaliknya, apa penjaga memungkinkan kita lakukan adalah bahwa hal yang sangat,
tapi memastikan bahwa itu adalah benar-benar terjadi bahwa url
telah benar ditetapkan oleh NSURL.
Dan jika sudah, maka melompati ini, dan itu
akan memungkinkan Anda untuk melanjutkan dengan url yang telah didefinisikan dengan baik.
Tetapi jika itu adalah kasus yang url tidak didefinisikan dengan baik,
jika fungsi ini kembali kesalahan atau beberapa hal tak terduga lainnya
benar-benar terjadi, penjaga konstruk ini memungkinkan kita untuk kemudian output yang error
dan kembali segera.
Iya nih?
>> AUDIENCE: Jadi itu semacam dari seperti jika kemudian lain?
DAN Armendariz: Ini semacam seperti jika kemudian lain, ya,
kecuali bahwa url ini kemudian didefinisikan untuk segala sesuatu di bawah ini.
Jika melewati penjaga ini, maka akan benar-benar diisi dengan data
dan dapat digunakan dalam sisa kode sumber dalam fungsi Anda.
Jadi saya menduga bahwa Anda akan mulai melihat penjaga ini juga.
Dan berhati-hati itu.
>> Jadi hanya melihat beberapa lainnya hal, hak ini di sini adalah apa,
Menurut Anda, hanya berdasarkan apa kami berbicara tentang sebelum?
>> AUDIENCE: Pikirkan itu akan dijalankan dalam daftar?
>> DAN Armendariz: Jadi yang dekat.
Ini adalah fungsi yang kita mendefinisikan.
Dan kita memasukkan fungsi yang sebagai argumen untuk fungsi ini di sini.
>> AUDIENCE: [tidak terdengar] jika tidak nihil.
Jadi itu dalam daftar, kan?
>> DAN Armendariz: Jika kesalahan tidak nihil, sehingga is-- jadi saya harus gulir.
Nah, mari kita lihat, saya bisa benar-benar gulir ke sini.
kesalahan argumen yang sedang dilewatkan ke fungsi anonim ini.
Ini adalah fungsi anonim.
Tidak memiliki nama.
Tapi kita menerima ketiga argumen, data, respon, dan kesalahan.
Dan itu akan kembali batal, sehingga itu tidak akan kembali apa-apa.
Dan ini adalah isi fungsi itu.
Dan kemudian kita memiliki akses dalam yang fungsi untuk masing-masing argumen ini.
>> Jadi itu angin puyuh tur bahasa.
Tapi saya harap dengan ini, mudah-mudahan saat Anda mengambil
lihat beberapa tutorial khusus untuk pengembangan iOS dengan Swift,
terutama jika Anda pergi ke Apple pengembang web page--
mereka memiliki banyak benar-benar baik tutorial untuk Anda mulai.
Tapi mudah-mudahan saja jam ini berbicara tentang sintaks sendiri telah memberikan
Anda cukup untuk memulai dengan itu.
>> Kami akan posting semua sumber ini Kode di website seminar
sesegera mungkin, dan juga slide sehingga Anda memiliki referensi bagi semua orang.
Tapi keberuntungan dengan proyek Anda.
Dan terima kasih semua sangat banyak untuk datang.
>> [TEPUK TANGAN]