>> [Bermain muzik]
>> DAN AMRMENDARIZ: Setiap orang, selamat datang ke seminar CS50,
iOS Pembangunan App dengan Swift.
Saya Dan Armendariz, dan saya pendidik yang sains komputer di sini di Harvard.
>> Dan jam berikutnya akan menjadi lawatan badai barangan sebanyak
mengenai topik ini kerana kami boleh muat.
Saya akan menghantar semua kod sumber bahawa anda akan lihat hari ini dalam talian.
Kita mungkin tidak dapat benar-benar pergi atas segala sesuatu
bahawa saya bahawa saya menunjukkan anda dalam jam ini.
Tetapi sekurang-kurangnya diharapkan melalui komen-komen kod sumber,
anda akan dapat untuk mencuba untuk mencari jalan apa sebenarnya yang berlaku untuk perkara-perkara
bahawa kita tidak cukup sampai ke.
>> Secara keseluruhan, struktur ucapan hari ini adalah seperti berikut.
Kami akan bermula melakukan beberapa asas sintaks dengan bahasa Swift,
pergi ke beberapa yang lebih maju sintaks bahasa Swift.
Kerana bahasa adalah benar-benar moden dan ia
mempunyai banyak tahap yang tinggi ciri-ciri, perkara-perkara yang kita tidak mempunyai
lihat dalam C sepanjang CS50, atau juga beberapa bahasa-bahasa lain
bahawa kita telah mula menggunakan dalam CS50 seperti PHP,
jadi saya akan perlu cuba untuk memperkenalkan juga beberapa topik yang
berkaitan dengan bahasa peringkat yang lebih tinggi bahawa anda tidak boleh melihat secara mendalam di CS50,
tetapi anda akan melihat di kemudian kelas sains komputer.
Jadi ia akan menjadi padat jam.
Dan jangan ragu untuk membiarkan saya jika anda mempunyai sebarang pertanyaan.
Jadi jika anda berminat dalam melakukan pembangunan
dengan Swift, atau benar-benar apa-apa pembangunan aplikasi iOS,
terdapat beberapa keperluan.
Pertama sekali, anda perlu untuk menggunakan Mac, berjalan dalam contoh
bahawa kita akan menggunakan hari ini, versi yang agak baru OS
X. Dalam kes ini, saya berjalan X 10.5.
Anda boleh berjalan 10.11 jika anda mahu.
Tetapi segala-galanya yang anda akan lihat adalah yang melibatkan Xcode 7 dan kemudian,
yang mempunyai versi terbaru Swift, yang Swift 2.0.
Ini sebenarnya yang cukup perbezaan yang penting.
Banyak sintaks mempunyai berubah cukup ketara
dalam beberapa kes dari Swift 1.0, yang telah dilancarkan pada tahun lepas,
untuk Swift 2.0, yang hanya keluar jatuh ini.
Oleh itu, kita akan menunjukkan kepada Swift 2.0.
Banyak perkara-perkara yang anda mencari dalam talian
apabila anda cuba untuk mendapatkan tambahan maklumat mengenai pelbagai perkara,
anda mungkin mahu jelas mencari Swift 2
bukannya Swift sekadar lama untuk membuat memastikan bahawa anda mendapat sintaks yang betul.
>> Malah, ini biasanya benar.
Terdapat sejumlah pesat pembangunan berlaku dalam bahasa Swift
sejak Apple mengeluarkan, saya fikir apa, ia telah sedikit lebih setahun
sekarang.
Dan perkara yang telah berubah secara mendadak pada masa itu.
Dan sebagainya tidak kecewa jika, apabila anda melihat sekeliling
untuk topik mengenai Swift atau bagaimana untuk mencapai sesuatu menggunakan beberapa kod contoh
atau sesuatu yang ia tidak benar-benar bekerja pada Swift 2.0.
Pastikan anda sedang mencari khusus untuk versi yang
mencuba untuk mengurangkan kesan-kesan yang berbeza versi dan orang-orang macam perkara.
>> Saya akan cuba untuk menunjukkan hanya beberapa perkara yang berbeza untuk versi yang lebih lama.
Tetapi ia adalah sesuatu yang perlu diawasi.
Itu mungkin akan menjadi salah satu sakit kepala terbesar
yang anda akan mempunyai dengan Swift adalah mencari kod contoh yang lebih tua, walaupun hanya
oleh beberapa bulan, cuba untuk menggunakan dalam projek yang lebih moden anda.
Dan ia hanya semata-mata tidak berfungsi.
Anda mendapat ralat pengkompil, sintaksis kesilapan, pelbagai barangan gila.
Jadi hanya bersabar dengan itu, dan anda akan mudah-mudahan
mempunyai pengalaman yang cukup baik dengan keseluruhan Swift.
>> Sekarang anda boleh sebenarnya join-- dan saya berharap kita sebenarnya masih mempunyai ini year-- ini
CS 50-an Apple app pasukan pembangunan, yang
akan membolehkan anda untuk memasang apa-apa aplikasi yang anda buat pada peranti iOS anda.
Jadi kita lihat di URL ini jika anda berminat untuk melakukannya.
>> Jadi hanya beberapa perkara tentang Swift sendiri.
Ia adalah bahasa yang disusun.
Tetapi anda akan melihat bahawa beberapa ciri-ciri yang kita gunakan
membolehkan ia digunakan juga dalam sedikit seperti yang ditafsirkan dengan cara juga.
>> Banyak sintaks yang dipinjam dari C. Ia berdasarkan dan ditulis dalam C.
Demikianlah kita akan melihat bahawa terdapat banyak bawa pulang
dari pengetahuan sedia ada anda dari C yang kita boleh pelabuhan untuk Swift.
>> Tetapi ada perkara yang membuat ia sangat berbeza daripada C.
Ia sangat kuat ditaip.
Ada pengurusan ingatan automatik.
Anda tidak akan mempunyai untuk menggunakan malloc atau di mana percuma.
Ia direka untuk keluasan.
Jadi dalam erti kata lain, anda boleh menggunakannya dalam pelbagai konteks, daripada Apple Watch
ke iPhone sepanjang jalan sehingga kepada OS X, dan juga beberapa pelayan, juga beberapa skrip.
Tetapi kita akan melihat bahawa sokongan untuk skrip
tidak cukup di sana lagi kerana ia adalah dalam bahasa-bahasa lain.
Jadi kemungkinan besar anda akan menggunakan ini semata-mata untuk pembangunan
pada Mac atau iPhone anda.
>> Dan ia mempunyai banyak ciri-ciri moden.
Dan banyak perkara-perkara ini adalah barangan yang kita akan cuba untuk menangani hari ini,
tetapi juga topik kami yang terus-terang, kita boleh menumpukan keseluruhan kursus.
Malah, CS 51, yang merupakan semester akan datang yang ditawarkan,
memberi tumpuan banyak mengenai topik-topik ini yang dinyatakan di bawah.
Jadi, anda boleh menghabiskan satu semester memahami perkara-perkara ini.
Tetapi kita akan cuba untuk mendapatkan melalui mereka
sekurang-kurangnya cukup bahawa anda boleh memahami apa yang
berlaku apabila anda melihat pada program Swift
dan dapat hack cara anda melaluinya untuk projek akhir.
>> Sekarang salah satu cara yang terbaik yang anda boleh mendapatkan maklumat tambahan mengenai ini
terus-terang sahaja melalui Apple menyediakan dokumentasi untuk Swift.
Ada banyak API yang boleh didapati.
Dan ini adalah asas rumah yang baik untuk anda untuk mencari, perkara-perkara tertentu yang
mahu lakukan dengan API yang melibatkan iOS.
Jika anda mahu menggunakan kamera untuk Contohnya, anda boleh mula mencari di sini,
dan juga menggunakan Google dan Stack Limpahan seperti biasa.
>> Sebarang pertanyaan mengenai ini sebelum kita melompat kanan dalam?
Baiklah.
Mari kita bergerak ke atas.
>> Jadi pertama, saya mempunyai bilangan fail contoh.
Dan saya akan cuba untuk melangkah melalui mereka agak cepat.
Ini adalah fail Hello World untuk Swift.
Ia amat mudah.
Ada cara yang lebih komen daripada terdapat kod sebenar.
Perhatikan kod sebenar adalah di bahagian paling bawah di talian 14.
Ia mengatakan cetak.
Dan kemudian ia panggilan fungsi.
Kita lulus ke dalamnya rentetan dipanggil Hello cs50.
Perhatikan bahawa tidak ada koma bertitik.
Perhatikan bahawa tidak ada utama int.
Ada tiada yang Cruft bahawa kita mempunyai dengan C.
Apabila kita menggunakan Swift dengan cara ini, yang hanya ditulis dalam fail teks
dan disimpan pada komputer saya, maka Saya boleh menyusun dan menjalankannya.
>> Perhatikan bahawa di sini Saya tidak menggunakan IDE CS50.
Ini menganggap bahawa saya berjalan dan bahawa saya pada OS X,
dan bahawa saya telah Xcode telah dipasang pada mesin ini dalam usaha untuk ini
untuk benar-benar berfungsi.
Tetapi ini hanya fail teks biasa yang kita boleh menyusun dan mengedit.
Jadi mari kita lihat bagaimana ini sebenarnya berfungsi.
Bagaimana jika saya ingin menyusun?
1.swift swiftc.
Selepas seketika atau dua, ia akan melihat bahawa kita ada sekarang
disusun ini ke dalam fail yang dipanggil 1.
Dan sekarang kita telah dicetak CS50 kami, permohonan Hello World kami agak.
>> Perhatikan satu perkara lain yang dengan baik adalah dengan lalai,
kita tidak perlu input a / n untuk mencetak baris baru.
Secara lalai, fungsi cetak dalam Swift akan mencetak baris baru untuk anda.
Anda boleh lulus tambahan pilihan parameter untuk memberitahu ia tidak berbuat demikian.
Tetapi Google untuk maklumat lanjut mengenai itu.
Secara lalai, ia akan melakukan garis cetak.
>> Baiklah, jadi mari kita beralih kemudian kepada beberapa perkara lain.
Jadi bagaimana boleh kita benar-benar menentukan pembolehubah?
Kita boleh melakukan itu menggunakan salah satu daripada dua kaedah.
Dan salah satu yang saya ingin memberitahu anda tentang pertama adalah definisi let ini.
Dan ini adalah penting kerana berkesan
apa yang kita lakukan adalah menentukan pemalar.
Kami akan mewujudkan pembolehubah, atau lebih tepat dipanggil nama yang tetap,
menyediakan kepadanya beberapa data-- dalam kes ini, rentetan Dan itu.
Tetapi dengan menggunakan let ini kata kunci, kita katakan
bahawa ini variable-- atau lagi constant-- dipanggil
nama tidak pernah akan berubah.
Ia akan menjadi tidak berubah-ubah sepanjang tempoh program ini
atau di seluruh tempoh konteksnya
yang berubah-ubah yang boleh didapati.
>> Ini adalah benar-benar penting bahawa apabila anda mempunyai beberapa data yang tidak
akan berubah dalam program anda, dan anda akan melihat pelbagai contoh
kira-kira apabila kita mahu menggunakan biarkan berbanding sintaks yang lain,
ia adalah penting bahawa anda menggunakan biarlah mana mungkin kerana memberitahu ini
bahasa yang ia adalah tidak akan berubah,
dan ia sebenarnya boleh melakukan banyak pengoptimuman
untuk meningkatkan kelajuan dan keselamatan program anda.
Dan dengan keselamatan, maksud saya biarkan ia kemalangan dengan kesilapan gila
bahawa kita mungkin biasa melihat dalam C.
>> Maka kita boleh menggunakan rentetan interpolasi untuk merangkumi ini dalam rentetan.
Oleh itu, kita boleh lihat dalam ini garis cetak, cetak hello,
dan kemudian menggunakan garis sendeng terbalik parens terbuka, dan kemudian nama pembolehubah saya,
dalam kes ini berterusan, menutup kurungan.
Saya pada dasarnya kemudian meletakkan kandungan nama pembolehubah dipanggil ini
dalam tali dan kemudian mencetak hasil di sana.
>> Ada satu perubahan lain ke fail ini: yang yang saya ada, di bahagian paling atas,
dimasukkan ke dalam garis shebang, yang pada dasarnya hanya menyatakan
yang saya mahu untuk menggunakan Jurubahasa Swift, yang
bermakna bahawa saya tidak lagi perlu menyusun program khusus ini.
Saya hanya boleh berjalan seperti skrip sendiri.
Tetapi ini, dalam kes ini, di belakang tabir sedang disusun dan kemudian
diuruskan.
Ia hanya dapat dilihat dengan kami.
>> Baiklah, jadi mari kita beralih.
Jadi ada sedikit tipu muslihat yang hanya berlaku sebelum ini.
Aku membawa kepadamu bahawa saya boleh menentukan pemalar.
Dan saya boleh memberi sedikit data untuk melakukannya.
Tetapi dalam kes ini, notis bahawa saya tidak sebenarnya menentukan jenis data
bahawa ia adalah.
Dan itu kerana pengkompil, Swift boleh
membuat kesimpulan jenis data hanya berdasarkan data yang saya masukkan ke dalamnya.
Kerana ia tahu bahawa dengan menilai ini berubah-ubah di sini, ini buat data
di sini, ia tahu bahawa ia adalah rentetan.
Dan supaya nama malar ini Oleh itu, adalah akan menjadi rentetan juga.
>> Tetapi kita juga boleh menjadi jelas tentang jenis itu
kita akan gunakan untuk pemalar atau pembolehubah
dengan menggunakan sintaks ini instead-- biarkan String nama kolon sama
Dan, yang dalam kes ini bermakna kami akan menentukan menamai yang tetap.
Ia akan menjadi jenis tali.
Dan nilai yang akan menjadi Dan.
Sekarang cara lain yang kita boleh membuat variables--
dan ini adalah pembolehubah yg mungkin berubah, yang bermakna bahawa kita adalah, sebenarnya, akan
untuk menukar kandungan mereka kadang-kadang dalam tempoh konteksnya
yang berubah-ubah yang defined-- kita menggunakan kata kunci var dan bukannya membiarkan.
Tetapi sekali lagi, secara lalai, kecuali anda tahu bahawa anda perlu untuk memanipulasi data itu,
cuba menggunakan biarlah untuk peningkatan prestasi.
>> Dalam kes ini, saya boleh kemudian nyatakan jenis data
yang kita harapkan untuk menjadi bahagian dalam pembolehubah baru ini dipanggil label.
Ia akan menjadi rentetan.
Dan kita akan kemudian concatenate dua tali bersama-sama, tali hello,
dan tali yang diwakili oleh berubah-ubah, atau lebih tepat nama yang berterusan.
>> Jadi ini adalah baik kerana ini agak PHP seperti dalam kita yang
mempunyai tali dinamika sangat mudah.
Kami tidak mempunyai untuk secara automatik menggunakan apa-apa jenis pengurusan ingatan
untuk meningkatkan saiz dan melakukan apa-apa jenis perkara-perkara lucu di sana.
Ini kerja-kerja seperti yang kita benar-benar inginkan.
>> Baiklah, apa-apa soalan mengenai perkara ini?
>> Sekarang sebab lain yang kami memerlukan anda mempunyai keupayaan
dapat menentukan apa Jenis pembolehubah data adalah
kerana kadang-kadang kita tidak mahu untuk memulakan pembolehubah
dengan beberapa data di titik definisi.
Jadi dalam kes ini, katakan yang saya ingin memulakan memasukkan
beberapa gred ke dalam sebuah buku gred.
Well, saya tahu bahawa salah satu pembolehubah yang saya mahu menjadi
akan menjadi gred yg mungkin berubah.
Dan kita juga tahu bahawa kita mahu ia menjadi integer.
Tetapi mungkin kita tidak lagi mempunyai gred yang disediakan.
>> Dalam Swift, anda perlu untuk menentukan jenis data
yang dikaitkan dengan berubah-ubah atau biarkan berterusan
sebelum anda boleh sebenarnya menggunakan pembolehubah itu.
Oleh kerana ia adalah sangat ditaip, anda perlu mengaitkan jenis yang
dengan pembolehubah ini.
>> Jadi dalam kes ini, jika saya tidak ada betul dimulakan pertama dengan beberapa nilai,
maka saya perlu memberitahu Swift apa Saya menjangkakan jenis data untuk menjadi.
Dan ia akan kekal yang sama jenis data
dalam sejarah program ini.
>> Sekarang anda mungkin akan terdorong dengan seberapa segera yang Saya telah mencipta pembolehubah gred ini
dan dengan syarat bahawa ini adalah integer 100, sekarang jika saya
ingin mencuba untuk menyatukan rentetan dengan integer itu,
mungkin akan terdorong untuk masih menggunakan bahawa pengendali tali dinamika
seperti yang kami lakukan hanya beberapa baris sebelum ini.
Tetapi malangnya, ini akan sebenarnya tidak
bekerja, kerana anda adalah dasarnya melaksanakan
operasi kepada dua jenis yang berbeza.
>> Sekarang ini adalah sangat berbeza dari yang lain bahasa seperti PHP yang benar-benar
tolol loosey dengan mereka sort jenis.
Mereka hanya suka, ya, apa pun, saya tidak peduli.
Tetapi berilah satu jenis, dan mungkin saya akan melakukan perkara yang betul.
>> Dalam kes ini, Swift adalah sangat ketat mengenai jenis
bahawa anda berurusan dengan.
Ini pengendali penjumlahan atau pengendali dinamika
mempunyai asasnya beberapa pilihan yang berbeza mungkin.
Anda boleh melakukan penjumlahan dengan bilangan bulat, atau anda
boleh lakukan rentetan dinamika dan mungkin beberapa perkara lain juga.
Tetapi jika pengendali itu tidak mengiktiraf apa yang ada di sebelah sama ada ia,
atau sebaliknya gabungan mereka dua jenis, tidak apa yang ia menjangkakan,
maka ia akan menyebabkan kegagalan.
>> Jadi dalam kes ini, apa yang dimaksudkan mempunyai tali plus integer?
Baik dalam konteks ini, kita mungkin mahu
untuk melakukan operasi rentetan dinamika.
Tetapi sudah tentu komputer tidak mempunyai bahawa jenis konteks.
Dan dengan itu kita perlu menyediakan bahawa maklumat tambahan
membiarkan ia tahu apa yang ia ialah kita mahu lakukan.
>> Jadi dalam erti kata lain, hakikat yang Swift amat ditaip
bermakna anda perlu melakukan sedikit sedikit kerja tambahan
untuk mendapatkannya untuk mengendalikan cara yang anda mahu.
Tetapi hasilnya, ia adalah lebih selamat.
Dan sebaik sahaja anda mengambil kira orang-orang jenis,
perkara yang hanya terus-terang mula untuk bekerja dengan baik.
>> Jadi dalam kes ini, maka kita akan melaksanakan rentetan dinamika
dengan jelas pemutus integer kepada rentetan
dengan membungkus dalam ini modal S String fungsi,
dan kemudian menggunakan dinamika tali pengendali untuk mengubah pembolehubah label kami,
dan kemudian mencetak.
>> Setakat ini, begitu baik?
Baiklah, mari kita bergerak ke atas.
>> Kini terdapat pelbagai data jenis yang boleh kita gunakan dalam Swift.
Seperti yang anda telah menjadi biasa dengan, kita boleh membuat pelbagai yg mungkin berubah.
Dan lokasi yang hanya boleh mengandungi satu jenis.
>> Jadi dalam kes ini, kita akan mewujudkan satu tatasusunan yg mungkin berubah integer, yang
kami akan menghubungi gred, dan kami akan dapat untuk menyimpan bahawa dalam kurungan persegi ini
format seperti anda telah berkembang biasa ke dalam pelbagai bahasa lain.
Tetapi perhatikan bahawa di sini kita berada menentukan beberapa perkara.
gred adalah variable-- yg mungkin berubah kita tidak menggunakan kata kunci let itu.
Ini bermakna kita boleh mengubah suai kandungan pelbagai ini.
Ia adalah jenis Array Int, dan kami mengetahui perkataan yang
berdasarkan kurungan persegi di sini.
>> Sekarang salah satu perkara yang baik tentang ini adalah bahawa kita
mempunyai akses kepada banyak informasi tambahan
tentang array hanya menggunakan beberapa notasi dot mudah.
Jadi, sebagai contoh, grades.count menyediakan kepada kami
bilangan item yang wujud dalam yang pelbagai, yang kita boleh mengakses cantik
mudah hanya menggunakan bahawa notasi titik.
>> Jika anda ingin menambah tambahan barangan kepada pelbagai ini,
anda tidak boleh melakukan gaya PHP di mana anda hanya menentukan dengan jelas,
pada indeks yang diberikan, beberapa nilai yang anda mahu masukkan.
Sebaliknya, gunakan tambah yang kaedah dalam jenis array
untuk menambah item, 95, ke senarai ini.
>> Jadi sekarang pelbagai ini mempunyai pengikut yang contents-- 100, 0, 90, 85.
Dan sekarang kami telah dilampirkan 95 untuk itu juga.
>> Terdapat cara lain kita boleh menambah sesuatu.
Anda sebenarnya boleh menggunakan pengendali penjumlahan,
yang akan ditafsirkan sebagai operasi mudah tambah.
Dan anda boleh menambah satu lagi pelbagai, yang mempunyai kandungan 70 dan 80,
untuk pelbagai itu.
Jadi sekarang kita mempunyai kandungan dalam pembolehubah ini
grades-- 100, 0, 90, 85, 95, 70, dan 80.
Ini hanyalah sintaksis baik sedikit gula yang Swift memberikan kepada kami.
>> Jadi, jika kita ingin menjumlahkan gred, kami mungkin
akan mahu untuk melelar atas setiap item dalam gelung ini.
Dan kita mempunyai, dalam Swift, tanggapan daripada untuk gelung seperti yang anda inginkan.
Tetapi cara kita menunjukkan pelbagai adalah sedikit berbeza.
Jadi dalam kes ini, untuk kesimpulan segala-galanya, kita akan
akan mewujudkan sementara pembolehubah dipanggil jumlah dalam usaha kita
untuk mengekalkan kiraan ini.
>> Dan perhatikan untuk kami pembinaan gelung di sini.
Bagi indeks dalam 0 .. <grade.count.
Jadi pembinaan ini, 0 .. <grades.count adalah operasi rangkaian di mana kita berada
mengatakan bahawa kita akan membuat pelbagai integer dari 0 sehingga
tetapi tidak termasuk grades.count.
Jadi ini akan menjadi 0, 1, 2, 3, 4, 5, sehingga bagaimanapun banyak salah
sebelum grades.count.
>> Jadi ini adalah berbeza daripada cara kami biasanya akan digunakan untuk gelung
di mana anda akan mempunyai beberapa indeks berubah-ubah, menetapkan ia sama dengan 0 pada mulanya,
dan kemudian mengintegrasikan sehingga beberapa nilai kurang daripada kiraan barangan
dalam pelbagai itu.
>> Jadi ada pengubahsuaian ini, sebenarnya,
yang membolehkan kita untuk dengan mudah menetapkan jenis julat.
Jika anda menukar julat ini untuk tiga titik, 0 ... grade.count,
ini mewakili julat 0 untuk grades.count inklusif,
yang bermaksud bahawa jumlah itu juga maka termasuk dalam julat itu.
>> Tetapi ini adalah sangat berguna untuk perkara-perkara yang tepat,
apabila kita perlu melakukan lelaran lebih gelung
kerana orang-orang indeks adalah sifar diindeks, seperti yang kita lihat dalam bahasa lain
juga.
Sebarang pertanyaan mengenai perkara ini untuk gelung?
>> Jadi ada definisi tersirat pembolehubah indeks ini,
nilai yang bermula pada 0, dan berterusan pada setiap lelaran gelung
meningkat sebanyak 1 sehingga mata yang sama dengan grades.count,
di mana titik, gelung itu akan berhenti.
>> Perhatikan bahawa dalam rentetan kami interpolasi sini,
kita benar-benar boleh melakukan beberapa mudah manipulasi kepada nilai.
Jadi indeks ditambah 1 akan sebenarnya melakukan penjumlahan nilai yang
kerana indeks adalah, dalam kes ini, bilangan bulat.
Dan pada ketika itu, ia akan kemudian ditukar kepada rentetan
dan penentu ke dalam tali ini di sini, dan dicetak seperti yang kita jangkakan. .
>> Dan perkara yang baik tentang tatasusunan di sini adalah
bahawa kita juga mampu untuk mempunyai nilai semasa mengambil dan nilai menetapkan
menggunakan notasi kurungan persegi sebagai yang kami telah lihat dalam bahasa-bahasa lain juga.
>> Baiklah, jadi dari sini, kita kini mengira jumlah kami semua gred kami.
Sekarang semacam seterusnya langkah logik akan
untuk melakukan operasi bahagian untuk mencari daripada purata mereka gred.
Tetapi sesuatu yang penting di sini yang sedang berlaku yang
adalah bahawa jumlah ini mungkin integer.
Tetapi kita perlu melaksanakan beberapa jenis bahagian dua kali ganda.
Dan ini akan menjadi amat penting apabila
kita mahu melakukan operasi ini, kerana apa yang kita katakan
ialah kita perlu untuk benar-benar melaksanakan pembahagian kepada dua beregu.
Dan sekali lagi, kerana Swift sangat kuat ditaip,
kita jelas mesti menetapkan semua perkara untuk beregu sebelum kita benar-benar
melakukan pembedahan itu.
>> Jadi, dalam usaha untuk kita melaksanakan bahagian dua,
ia tidak mencukupi untuk hanya satu item-item untuk menjadi dua kali.
Kedua-dua mereka perlu menjadi seorang double agar pantas
untuk memastikan bahawa ini adalah apa yang kita mahu lakukan.
Oleh itu, kita akan secara jelas typecast maka jumlah wang yang kami telah dikira di atas
dan kiraan gred untuk beregu, dan kemudian melaksanakan operasi dan stor
itu ke dalam pembolehubah baru ini, atau sebaliknya berterusan baru ini dipanggil purata,
yang akan mempunyai apa jenis, anda bayangkan?
Double, ya.
Jadi dalam kes ini, kita tidak perlu menentukan ia
kerana ia boleh disimpulkan daripada operasi jenis purata data apa
akan jadi.
Dan Swift umumnya cukup baik mengenai kemampuan untuk membuat kesimpulan jenis.
>> Adakah anda mahu melihat ini berlari, atau boleh saya bergerak?
Saya hendak teruskan.
Sebarang pertanyaan mengenai apa-apa ini?
Yang besar.
>> Sekarang kita akan mula untuk sampai ke baik fungsi takrifan stuff--,
dan beberapa jenis lain yang unik untuk Swift bahawa anda tidak mempunyai
lihat dalam bahasa lain sehingga ketika ini,
tetapi mereka hadir dalam lain-lain bahasa yang anda mungkin dapati di kemudian hari.
Jadi pertama jika anda mahu untuk menentukan fungsi,
anda menentukan dengan perkataan funky fungsi, dan kemudian nama fungsi,
dan kemudian dalam kurungan, hujah-hujah yang anda mahu fungsi yang menerima.
Hujah-hujah yang mesti juga specify-- generally--
juga mesti menentukan jenis data yang mereka berada, kecuali jika mereka boleh disimpulkan.
Dan kita akan melihat bahawa sedikit kaveat yang hanya sedikit.
>> Jadi dalam kes ini kita mempunyai fungsi dipanggil printGradeCount.
Kami akan menerima variable-- atau sebaliknya dalam kes ini,
constant-- yang dipanggil gradebook.
Dan ia akan menjadi menaip pelbagai integer.
Sekarang ada sesuatu itu benar-benar penting di sini
yang saya mahu anda untuk memahami.
Itu adalah bahawa secara lalai, hujah-hujah ini yang merupakan input kepada fungsi ini
ditakrifkan dengan kata kunci let tersirat, yang bermaksud bahawa saya tidak boleh mengubah suai ini
berubah-ubah gradebook sini.
Dan yang jenis masuk akal, kerana anda lulus data dalam.
Dan anda mungkin tidak mahu ia ditukar dari bawah anda.
Ia adalah mungkin untuk menyebut dengan jelas bahawa ini adalah satu pemboleh ubah dengan meletakkan
kata kunci var di sini.
Tetapi itu adalah gotcha bahawa kami telah orang perasan telah dilakukan pada masa lalu
ialah mereka menganggap bahawa ia akan sebagai pembolehubah apabila, pada hakikatnya, ia
ialah pemalar.
>> Baiklah, jadi di sini itu, dalam kes ini, kita tidak menyatakan apa-apa jenis balasan.
Kami akan menunjukkan kepada anda bagaimana untuk melakukannya bahawa dalam hanya seketika.
Tetapi perhatikan bahawa di sini kita mempunyai hanya yang mudah jika keadaan.
Jika gradebook adalah kosong, yang dalam kes ini
hanya kepunyaan integer ini pelbagai, maka kita mencetak sesuatu.
Jika tidak, kita melakukan sesuatu yang lain.
>> Cukup mudah setakat ini saya fikir.
Hentikanlah saya jika anda mempunyai sebarang pertanyaan.
>> Sekarang fungsi ini, purata, juga mengambil beberapa hujah-hujah, atau sebaliknya satu hujah,
yang gradebook, dan masa ini akan kembali jenis kelamin.
Kerana ia mengira purata dan ia
akan benar-benar kembali yang purata dikira ke garisan memanggil.
>> Dalam kes ini, kita menentukan kembali selepas jenis anak panah.
Dan ini mungkin merasa jenis pelik pada mulanya.
Anda telah berkembang biasa untuk menetapkan pulangan
menaip sebelum nama fungsi.
Tetapi jika anda berfikir ini dari segi matematik,
seperti apabila anda mempunyai matematik yang menentukan fungsi,
anda mempunyai fungsi dengan beberapa input, dan ia menghasilkan output.
Dan itulah apa yang ini sepatutnya untuk meniru.
Dan ada beberapa bahasa lain yang mempunyai sintaks yang sama juga,
tetapi mungkin ada yang anda telah lihat dalam CS50.
Tetapi masih tidak boleh dikelirukan olehnya.
Anak panah bermakna apa yang sedang berlaku hendaklah dikembalikan dalam kes ini.
OK, jadi bagaimana kita akan untuk mengira purata ini?
Nah, jika gradebook yang kosong, dan kemudian kami
akan kembali 0, yang mungkin cara yang munasabah untuk merawat ini.
Saya tidak tahu, mari kita datang kembali kepada yang dalam sedikit.
Ini tidak boleh benar-benar menjadi cara yang munasabah
untuk mengira purata jika kita mempunyai gradebook kosong.
>> Maka kita hanya akan melaksanakan penjumlahan kami.
Perhatikan bahawa di sini kita sebenarnya mempunyai versi silih ganti yang
untuk gelung, yang membolehkan kita untuk melelar atas setiap item tunggal dalam array
dan meletakkan setiap elemen ke dalam pembolehubah sendiri.
Dengan menentukan gred dalam gradebook, apa yang kita katakan
adalah bahawa kita akan tersirat membuat malar baru yang dikenali sebagai
gred yang akan mewakili setiap item yang unik di gradebook yang
setiap kali secara lelaran gelung.
Jadi kali pertama ia berjalan, gred akan
menjadi item pertama dalam gradebook itu.
Kali kedua ia akan menjadi yang Perkara kedua, jadi dan sebagainya
sehingga gradebook mempunyai habis dirinya daripada unsur-unsur.
Maka kita akan dapat kesimpulan bahawa gred ke dalam pembolehubah penjumlahan kami
dan kembali purata kita seperti yang kita lihat sebelum ini.
OK, apa-apa soalan?
Ya?
PENONTON: Saya mempunyai dua soalan.
Nombor satu, hipotesis, boleh anda menjalankan integer pada peranti ini?
Tidak perlu menjadi seorang dua, betul?
DAN AMRMENDARIZ: Bolehkah anda mengulangi soalan itu?
PENONTON: Bolehkah saya melakukan integer sebagai purata?
DAN AMRMENDARIZ: Bolehkah anda melakukan integer sebagai purata?
Jadi kembali integer purata daripada dua?
>> PENONTON: Return-- anda mempunyai bahawa sekarang di bawah.
DAN AMRMENDARIZ: Di sini, kembali 0.0?
PENONTON: Ya, hanya kembali 0.
Oleh itu, ia akan sama ada 80 atau 85, tetapi tidak 85.2.
>> DAN AMRMENDARIZ: Jadi dalam kes itu, jadi ada pasangan cara yang berbeza
untuk menjawab itu.
Izinkan saya menjawab mereka teratur.
Jadi, jika saya hanya membuat nyata ini 0, 0 adalah satu nilai integer.
Dan sebagainya yang akan menyebabkan ralat jenis untuk kes ini
kerana ia mengharapkan dua tetapi kemudian kembali integer.
Jika saya mahu kembali integer, saya boleh.
Saya boleh menetapkan jenis pulangan untuk int, kembali 0 di sini,
dan tidak melaksanakan bahagian dua kali ganda.
Tetapi kita akan menjadi melakukan bahagian integer.
Dan dengan itu kita maka tidak akan mendapat purata yang kita mungkin inginkan.
Tetapi ya kita boleh mengubah suai jenis dengan cara itu.
>> PENONTON: Dan kedua, anda mempunyai satu dua kali pada bahagian atas.
Tetapi turun di bawah, apabila anda melakukan kembali Double,
yang sudah secara automatik kembali format Double.
Kenapa anda masih perlu untuk menentukan ia dengan anak panah di atas dengan Double?
>> DAN AMRMENDARIZ: Jadi dalam kes ini, ini adalah sebahagian
daripada the-- supaya mengulangi soalan itu, kerana ia tersirat daripada pulangan
jenis di sini, apa jenis ini sebenarnya adalah, kita perlu jelas dengan Swift
tentang apa yang kita mahu kembali daripada fungsi ini
supaya apabila ia melaksanakan menaip memeriksa, ia boleh memastikan
bahawa apa yang kita telah benar-benar ditulis turun di bawah sebenarnya sesuai dengan itu.
Jadi ia adalah jenis seperti cek dengan diri sendiri jenis keadaan.
Tetapi ada ialah-
>> PENONTON: [didengar] arrow?
>> DAN AMRMENDARIZ: Terdapat kes di kita boleh menentukan bahawa kita boleh secara tersirat
menetapkan jenis penyata itu.
Tetapi dalam kes ini, saya tidak rasa yang akan bekerja.
Ada beberapa sintaks lain bahawa kita akan lihat nanti.
>> Baiklah, jadi sumber ini kod adalah sedikit berbeza
kerana ini mem-parsing hujah daripada fungsi yang kita memanggil.
Biar saya tunjukkan kepada anda bagaimana ia berfungsi sebelum kita benar-benar bergerak
kepada beberapa perkara yang menarik yang yang berlaku di Swift.
>> Jadi dalam kes ini, jika saya hanya menjalankan ini kod, notis bahawa apa yang ia lakukan
manakala is--, ia jenis memberikan saya ralat pelik.
Saya perlu lulus beberapa bilangan bulat sebagai hujah baris arahan.
Jadi mari kita lihat, 150 dan 80, dan tekan Enter untuk mengetahui apa yang sebenarnya melakukan.
Ia menerima setiap nilai-nilai ini sebagai integer.
Ia memasukkan mereka ke dalam gradebook a.
Dan kemudian ia melaksanakan bahawa pengiraan purata
dan keluarkan yang seperti yang kita jangkakan.
>> Tetapi jelas ada sesuatu yang berlaku pada dengan ini menolak sesuatu
sesuatu yang integer.
Seperti yang anda mungkin ingat dari apabila kita berurusan dengan hujah baris arahan
dalam C dan bahasa lain, yang pertama 0-ke item dalam hujah baris arahan
senarai adalah nama arahan bahawa kita benar-benar dilaksanakan.
Jadi dalam kes ini, saya hanya menggelung atas segala hujah-hujah baris arahan.
Tetapi saya tidak melakukan apa-apa jenis mewah semak untuk melangkau lebih yang pertama.
Saya hanya secara jelas atau tersirat Saya memeriksa mana-mana jenis-jenis ini
adalah integer sebelum saya sebenarnya melaksanakan pengiraan ini.
>> Dan itu pada dasarnya apa yang berlaku di sini.
Untuk setiap hujah yang hujah-hujah proses ini,
Saya akan melaksanakan beberapa cek.
Dan dalam kes ini, saya akan cuba untuk convert pertama
hujah itu ke dalam integer dengan persembahan yang typecast jelas,
kerana ia adalah, pada input, rentetan dan tidak sebenarnya integer.
>> Tetapi ini adalah jenis sintaks pelik, jika gred biarlah sama Int (dalil).
Apa yang sebenarnya berlaku di sini adalah amat
penting untuk anda menggunakan Swift.
Ini menggunakan apa yang dipanggil jenis pilihan.
>> Jadi fungsi ini, Int (dalil), mengembalikan bukan hanya satu integer, tetapi pulangan
apa yang dipanggil integer pilihan.
Dan sebagainya ini adalah jenis jenis di atas jenis.
Anda boleh semacam bayangkan seperti ia kembali seperti pakej.
Dan apabila anda membuka yang pakej, sama ada
mempunyai integer, yang merupakan hasil, atau ia mempunyai apa-apa di dalamnya sama sekali.
Dan ini adalah berguna sebagai semakan ralat mekanisme, kerana dalam kes ini
kita dapat mengetahui, adalah ini jenis penukaran berjaya?
Jika ia, maka ia adalah sebenarnya akan mempunyai integer dalam.
Jika tidak ia akan mempunyai beberapa nilai yang kita akan memanggil sifar, yang
adalah wakil tidak integer sama sekali.
Ia benar-benar mewakili apa-apa.
>> Dan hal ini jika pembinaan membolehkan kita announced pakej itu,
yang mengikat pilihan.
Dan jika kita mampu announced yang pakej dan mencari integer di dalam,
maka apa yang kita katakan di sini ialah kita akan kemudian
membolehkan nilai yang akan ditetapkan ke dalam malar ini dipanggil gred.
Dan bahagian ini jika kenyataan itu, bahagian atas jika kenyataan itu
akan berjalan, kerana itu Bukalah kain-kain itu berjaya.
>> Jika ia hanya kebetulan bahawa terdapat ralat mungkin
dalam ini jenis penukaran yang jelas dari rentetan kepada integer, mungkin
ia ABC nilai sebagai contoh.
Dan itu sebenarnya tidak akan untuk menukar kepada integer.
Maka ia akan kembali tiada, yang bukan integer.
Dan ini jika kenyataan baik maka gagal.
gred tidak akan wujud kerana ia tidak mempunyai kandungan integer.
Dan ia akan berjalan blok lagi yang ini pula.
Ya?
>> PENONTON: Nil ialah N-I-L?
DAN AMRMENDARIZ: nil ialah N-I-L, ya.
>> Jadi ini adalah mungkin salah satu daripada perkara yang paling sukar tentang Swift,
terutamanya apabila anda berada dalam lalang pada aplikasi iOS
dan anda sebenarnya cuba untuk melakukan beberapa pembangunan di sana.
Ia akan dapat menjerit pada anda tentang pilihan.
Ia akan meminta anda untuk tanda tanya dan tanda seru.
Tetapi apabila anda memikirkan out-- jika anda meluangkan masa untuk memikirkan
apa yang sedang berlaku dengan jenis pilihan, anda akan menjimatkan banyak sakit kepala
seperti yang anda cuba untuk menulis aplikasi dalam Swift.
>> Ia sebenarnya satu ciri yang sangat kuat.
Dan anda hanya perlu mengambil kata-kata saya untuk itu buat masa sekarang.
Tetapi kita akan melihat pembinaan ini dan beberapa orang lain suka
dalam beberapa kod sumber lain yang kami akan menunjukkan kepada anda dalam hanya sedikit.
>> Adakah terdapat sebarang pertanyaan awal di sini?
Jadi bawa pulang yang penting adalah bahawa jenis pilihan adalah jenis metatype a.
Ia sama ada mempunyai nilai, dan jika ia berlaku, maka ia
mungkin akan mempunyai nilai yang berkaitan dengan itu, atau ia tidak mempunyai nilai apa-apa,
dan ia diwakili oleh tiada.
Selebihnya ini mungkin seperti yang anda inginkan.
>> Jadi mari kita jalan sehingga yang kesukaran sekali lagi.
Dan kali ini, mari kita lihat beberapa jenis data yang lain yang benar-benar wujud.
Salah seorang daripada mereka adalah kamus, yang hampir sama dengan Python kamus.
Ia adalah agak serupa dengan jadual hash dalam C. Ia pada asasnya adalah pemetaan kunci
di mana kunci boleh menjadi tali.
Dan apabila kamu melihat orang-orang sehingga kunci, mereka kunci akan mempunyai nilai.
Jadi ia tidak cukup pelbagai, tetapi sebaliknya, lebih rapat
kepada peta hash atau jadual hash.
>> Mari kita lihat bagaimana ini sepatutnya bekerja sebelum kita benar-benar
pergi ke dalam kod sumber itu sendiri.
Jika saya hanya menjalankan ini, apa-apa yang benar-benar berlaku.
Ia memberitahu saya bahawa saya menjangkakan beberapa parameter jenis berikut.
Jadi, saya akan kemukakan kepada ia beberapa nama set masalah,
supaya pset0, mungkin saya mendapat 100.
Dan pset1, saya mendapat 5.
Dan kemudian pada peperiksaan, saya dengan amat baik dan mendapat 30.
Dan oops, saya tekan ruang di sini.
>> Apabila saya tekan Enter, anda boleh melihat ia melakukan beberapa pengiraan.
Ia mengatakan gradebook adalah tiga gred, pset1, pset0, peperiksaan.
Dan gradebook mempunyai purata khusus ini.
Jadi sekali lagi, kami sedang berusaha dengan idea gradebook ini,
tetapi kita akan terus iterating dengan kerumitan fungsi kami.
>> Jadi pada permulaan, kami hanya akan mewujudkan fungsi yang
bertanggungjawab untuk mencetak penggunaan.
Dan ada keluar ini fungsi yang akan hanya
secara paksa berhenti permohonan.
Ini bukanlah sesuatu yang akan anda gunakan dalam aplikasi iOS.
Ini sahaja, dalam kes ini, dengan hujah baris arahan.
Seterusnya kita akan mula bergerak ke arah Xcode.
Tetapi ini adalah khusus untuk perintah garis program di rumah Swift.
>> Mari kita lihat di beberapa perkara-perkara yang menarik di sini.
Mari kita lihat, hanya beberapa perkara yang menarik lagi mungkin
adalah bahawa dalam fungsi saya mencetak jumlah gred,
anda mungkin ingat bahawa saya mempunyai senarai itu daripada pset1 items--, pset0, dan peperiksaan.
Anda boleh benar-benar cepat dan mudah melakukan ini
dengan mengambil gradebook, yang merupakan kamus yang mempunyai kunci dan nilai-nilai.
Semua yang penting adalah melalui kaedah kunci dot sini,
dan kemudian menggunakan joinWithSeparator ini, yang kemudiannya akan mengambil semua kunci
bahawa kita telah ditaip, pset1-- atau maaf, pset0, pset1 dan exam--
dan menyatukan mereka bersama-sama menggunakan koma dan ruang
untuk mewujudkan satu rentetan panjang.
Ini operasi menyertai hanya phenomenally berguna dalam pelbagai konteks.
Dan oleh itu adalah joinWithSeparator ini.
>> Dan ini adalah satu perkara yang berubah daripada Swift 1 hingga Swift 2.
Dulu ada yang Python style-- jika anda
biasa dengan Python-- Python yang gaya menyertai kaedah pada tali.
Tetapi itu tidak lagi kes di Swift 2.
Anda mahu menggunakan ini jika anda mahu untuk merangkaikan pelbagai barangan
bersama-sama dengan tali.
>> Jadi mungkin maka dalam kita perbincangan purata sebelum ini,
ia masuk akal sedikit lebih bagi kita untuk menetapkan fungsi purata
menjadi dua pilihan dan bukan daripada sekadar dua jelas.
Kerana kami bahawa keadaan luar biasa di mana,
bagaimana jika gradebook sebenarnya tidak mempunyai nilai di dalamnya?
Apakah yang perlu purata pulangan?
>> Well mungkin dalam C anda akan melakukan sesuatu
seperti menyediakan nilai sentinel, seperti 0,0, atau mungkin nombor negatif,
atau sesuatu yang hanya mewakili fakta bahawa terdapat beberapa keadaan ralat
dan anda mungkin tidak benar-benar mempunyai keupayaan untuk mengira purata tersebut.
Well keindahan menyatakan yang jenis pilihan adalah untuk berbuat demikian.
Dan sekarang saya katakan perkataan ini tetapi ini sebenarnya tidak menggunakan optionals.
Tetapi kita akan melihat bahawa hanya dalam minit di mana kita boleh menetapkan purata
sebagai suatu jenis data pilihan supaya jika ia benar-benar kembali beberapa data, kemudian
kita akan kembali data tersebut.
Jika tidak, kita akan kembali nil, mengatakan bahawa ini
tiada pengiraan bermakna.
>> Mari kita beralih kepada sesuatu yang lain.
Jadi dari sini, kita telah melihat semua contoh-contoh ini dalam baris arahan.
Tetapi benar-benar apa yang anda akan untuk berurusan dengan adalah Xcode.
Dan salah satu perkara yang baik mengenai Xcode, dan khususnya dalam Swift,
adalah bahawa kita mempunyai ini Perkara yang dipanggil Taman Permainan.
Dan padang permainan adalah tidak sama sekali sebuah aplikasi iOS.
Tetapi ia membolehkan anda untuk bereksperimen dengan Swift dengan cara yang sangat mudah.
Anda boleh menaip semua kod anda.
Ia baik sintaks yang dinyatakan di sini.
Apabila anda mencipta fail baru, ia akan meminta anda jika anda ingin membuat taman permainan.
Tetapi perkara yang baik mengenai Taman Permainan adalah bahawa di sebelah kanan tetingkap anda,
adakah ia benar-benar menunjukkan kepada anda output daripada kod anda.
Jadi, jika saya tatal ke bawah, kita dapat melihat apa pengeluaran pelbagai baris kod
yang sebenarnya berlaku untuk menjadi.
>> Jadi dalam kes ini, kita akan menukar arah hanya sedikit
dan bercakap tentang sesuatu yang benar-benar penting kepada cara peringkat tinggi ini
yang Swift beroperasi, dan ia idea ini penutupan.
Dan anda mungkin telah melihat ini sedikit dalam JavaScript.
Bagi anda yang berada dalam CS50, penutupan
adalah sangat popular, cara yang sangat baik untuk melakukan perkara-perkara yang tinggi dalam bahasa-bahasa moden.
Tetapi ia juga agak susah untuk balut kepala anda sekitar kali pertama.
Jadi, jika anda melihat ini kali pertama, itu OK.
Lihat sahaja kod sumber dan melihat jika anda boleh mencari penyelesaiannya di rumah.
>> Jadi dalam kes ini, mari kita mengatakan bahawa kita ingin membuat banyak atlet
dengan beberapa nilai tetap.
Jadi dalam kes ini saya boleh membuat fungsi.
Saya akan memanggilnya kuasa 2 tujuan yang tunggal dalam kehidupan
adalah untuk mengambil beberapa input dan dua ia boleh pulang nilai itu.
Perhatikan bahawa di sini saya menerima satu jenis data.
Ia akan menjadi pembolehubah yang dipanggil x.
Ia adalah dari jenis Double.
Dan saya akan mengembalikan Double sini.
Dan saya hanya akan melakukan yang sangat, terus-terang, cantik
cara naif untuk menggandakan nilai ini.
Dan saya akan menunjukkan kepada anda mengapa ini berguna dalam hanya satu saat.
>> Perhatikan bahawa di sini kita mempunyai julat ini lagi. sesuatu dalam 1, dot
dot dot, 2, yang bermaksud bahawa gelung ini akan berjalan dua kali.
Tetapi ini merupakan satu pemboleh ubah dummy.
Ini bermakna saya tidak benar-benar akan menggunakan pembolehubah yang mana-mana sahaja
dalam gelung ini.
Saya hanya mahu baris ini kod untuk menjalankan dua kali,
tanpa perlu tahu nilai julat itu.
>> Jadi dalam kes ini saya berjalan hasil kali x dua kali, yang pada dasarnya
bermakna bahawa saya menyegiempatkan nilai ini.
Dan ini berlaku kepada bekerja seperti yang kita jangkakan.
Kuasa 2, lulus nilai 2.0 memberikan kita output 4.
3.2 kerja-kerja untuk 10.24.
>> Sekarang kita boleh melakukan yang sama perkara yang kuasa 3.
Tetapi kini berubah hanya julat.
Bagi pemboleh ubah dummy dalam 1 melalui 3, darab 3 kali,
dan melakukan perkara yang sama.
>> Jadi ini mungkin merasa sedikit dibuat-buat.
Tetapi ada yang penting perkara di sini yang
adalah bahawa melihat ini dua fungsi, ada
hanya satu perkara yang berbeza, yang merupakan nilai ini dalam julat.
Semua yang lain mengenai dua fungsi, kuasa 3 dan kuasa 2,
adalah, sebenarnya, sama kerana mereka bekerja dengan cara yang sama.
>> Jadi pada ketika ini, sedikit loceng penggera harus terkeluar.
Mudah-mudahan apa yang anda katakan, anda tahu, ini merasa sedikit
seperti pertindihan usaha.
Mungkin ada cara yang bahawa saya akan dapat merangkumi semua ini
dan menyediakan fungsi atau membuat fungsi yang
tidak betul-betul apa yang saya mahu tanpa yang perlu taipkan ia keluar dengan jelas.
Dan ini adalah apa kuasa penutupan yang membolehkan kita lakukan.
Jadi mari kita lihat ini.
Dan saya akan menghabiskan pasangan minit ini, kerana ini
adalah cukup penting bagi Swift.
Kami melihat ini sepanjang masa.
Kami akan menentukan fungsi.
Ia akan dipanggil powerOf.
Ia akan menerima parameter dipanggil y jenis Int.
Tetapi kita lihat pada jenis pulangan.
Jenis pulangan adalah, dalam kurungan, Double arrow Double.
Yang bermaksud bahawa fungsi ini, fungsi ini powerOf,
pulang fungsi.
Yang menerima Double dan mengembalikan Double.
Jadi yang mungkin bunyi jenis gila, tetapi mari kita tatal ke bawah sedikit
dan melihat untuk melihat apa yang berlaku.
Kami dalam fungsi powerOf ini.
Kami mewujudkan fungsi baru dipanggil exponentiator,
tetapi ia tidak kira apa yang ada.
>> Perhatikan bahawa ini mempunyai nilai input x.
Dan ia mengambil dalam Double dan mengembalikan Double.
Dan ini adalah kod yang sama bahawa kita lihat di atas, kecuali bahawa nilai 2
atau nilai 3, yang atas terikat dalam julat itu,
telah digantikan dengan nilai ini y, yang
merupakan parameter awal fungsi powerOf kami.
Dan pada ketika ini, kita kembali exponentiator.
Kami kembali fungsi.
>> Ia adalah jenis seperti fikiran bertiup sedikit.
Tetapi mari kita bayangkan apa yang berlaku apabila saya memanggil fungsi ini powerOf
dan masuk ke dalam ia beberapa nilai seperti 2.
Adakah ini bermakna bahawa Saya kini mempunyai nilai
2 y, yang bermaksud bahawa nilai ini y dalam fungsi exponentiator ini
akan menjadi nilai yang 2.
Tetapi saya kembali ini fungsi exponentiator.
>> Jadi notis apa Swift kata saya telah mencipta dalam kes ini.
biarkan persegi definisi, ia adalah fungsi yang berguru kepada seorang Double
dan mengembalikan Double.
Saya telah mencipta satu majlis bahawa kuasa dua sesuatu
menggunakan mekanisme ini di sini.
Dan benar-benar apa yang berlaku adalah bahawa ia kembali fungsi ini
exponentiator, tetapi nilai ini y dibalut di dalamnya.
Dan sehingga kini setiap kali saya menggunakan ini ubah atau malar ini dipanggil
persegi, ia ia akan berkelakuan sebagai fungsi.
Oleh itu, saya kemudian boleh memanggil pembolehubah yang seperti yang saya akan memanggil fungsi,
dan masuk ke dalam ia nombor, seperti dalam kes ini 3.
Dan saya akan mengambil ancang-nilai ini.
Jadi 3 kuasa dua kemudiannya menjadi 9, seperti yang kita boleh lihat di sini.
>> Benar-benar gila, tetapi ini sekarang membolehkan saya peluang
untuk mewujudkan fungsi powerOf lain.
Seperti yang boleh saya katakan, OK, baik sekarang saya mahu untuk mewujudkan satu fungsi baru, powerOf (3),
dan menyimpan yang ke tetap dipanggil kuasa tiga.
Dan sekarang kiub akan menjadi fungsi berasingan yang kemudiannya akan
mengambil beberapa nilai sebagai input dan kiub yang nilai seperti yang kita lihat dalam garis bawah
di sini.
kiub 2 akan menyebabkan 8.
>> Barangan Mudah-mudahan cantik kemas.
Anda tidak pernah dilihat sebelum ini.
Saya menggalakkan anda untuk melihat ke dalam penutupan dan menyiasat ini sedikit lebih.
Ia barangan benar-benar kuat kita lihat banyak dalam JavaScript dan beberapa bahasa lain.
Ia benar-benar penting untuk memahami API dan juga
bahawa kita akan mendapat dalam masa satu saat.
Ya?
>> PENONTON: Apabila anda melakukan powerOf (2), kurungan, dan kemudian
kurungan lain, input-- lain anda pada dasarnya menggantikan dataran.
DAN AMRMENDARIZ: Oleh itu, mencari di garisan yang terakhir di sini.
Ia sebenarnya sama sekali mungkin untuk berbuat demikian chaining seperti yang anda cadangkan.
Jadi powerOf (5) bermaksud bahawa kita akan untuk mempunyai exponentiator 5 di sini.
Jadi ini pada dasarnya akan menjadi perkara yang sama seperti 4 kepada kuasa kelima,
kerana kita telah membuat exponentiating yang berfungsi untuk kuasa yang kelima,
dan kami lulus ke yang berfungsi nilai 4.
Dan kita akan mendapat nilai yang yang kita jangkakan, 1024.
PENONTON: Dan ia bukan satu nama, jadi ia membuatkan ia lebih mudah
membaca, dataran apa sahaja.
>> DAN AMRMENDARIZ: Betul, betul-betul.
Jadi sebelum saya hanya meletakkan ia menjadi tetap di sini supaya
bahawa ia membuat ia mudah untuk digunakan nama itu.
Ya?
>> PENONTON: Dalam konteks ini powerOf, ia adalah sebahagian
bahasa pengaturcaraan yang bertentangan dengan cara anda
memikirkan powerOf dalam [didengar]?
DAN AMRMENDARIZ: Jadi dalam kes ini, powerOf
adalah semata-mata atas nama fungsi yang saya ditakrifkan di sini.
Jadi ia tidak wujud kepada bahasa itu sendiri,
tetapi sebaliknya, ia hanya fungsi yang mempunyai
nama itu kerana saya memberikan nama itu.
Apa-apa soalan lain?
Baiklah.
>> Sekarang ini adalah besar.
Tetapi anda tidak akan melihat banyak fungsi penutupan yang
seperti ini di mana anda menentukan, di dalam satu fungsi, fungsi yang lain.
Dan anda boleh melakukannya.
Tetapi ia adalah jenis tidak benar-benar perlu, bukan?
Seperti mengapa saya menetapkan ini fungsi dipanggil exponentiator
dan kemudian segera mengembalikannya.
Mengapa saya tidak boleh hanya dengan segera kembali fungsi ini?
>> Dan sebenarnya, inilah idea di sebalik konsep yang dipanggil
fungsi tanpa nama, di mana fungsi tanpa nama tidak benar-benar
mempunyai nama kerana mereka tidak perlu untuk mempunyai satu.
Dan sebagainya dalam kes ini, di 7B, kita boleh mencari dengan tepat itu.
Itu semua kod yang sama, melakukan perkara yang sama,
tetapi kini kami telah berubah sedikit supaya bahawa fungsi powerOf ini dengan segera
mengembalikan fungsi.
Perhatikan bahawa selepas kembali, terdapat satu kurungan kerinting terbuka.
Ia mengharapkan input ini Double.
Ia menjangkakan bahawa output Double.
Dan kemudian kata kunci memisahkan kod itu sendiri.
Jadi ini adalah satu fungsi tanpa nama.
Ia sebenarnya tidak mempunyai nama, sedangkan sebelum ia dipanggil exponentiator.
Tetapi seperti yang kita lihat, hanya benar-benar tidak merujuk kepada exponentiator
di luar fungsi tersebut.
Oleh itu, ia tidak mengapa.
Jadi fungsi tanpa nama ini adalah kononnya kerana ia adalah bernama,
tetapi ia masih digunakan dalam konteks kod ini.
>> Pasangan yang akan datang saya akan terus diharapkan
meniup fikiran anda sedikit.
Kami boleh memudahkan ini lebih.
Kerana seperti yang dengan bijak berkata sebelum ini,
mungkin kita benar-benar tahu, dengan kesimpulan dari kod ini, apa yang
output kod ini akan menjadi.
Dan sebenarnya, dalam fungsi tanpa nama ini, kita sebenarnya boleh membuat kesimpulan jenis data.
>> Jadi, dalam satu ini, kita tidak lagi perlu menentukan dengan jelas
jenis data yang yang yang input dan output daripada fungsi ini
untuk beberapa sebab.
Satu adalah bahawa kami telah ditakrifkan, sehingga di prototaip fungsi disertakan itu,
jenis data tanpa nama ini fungsi perlu input dan output.
Dan dari yang lain, kita boleh membuat kesimpulan dari kod
turun di sini bahawa kami menerima input iaitu dari jenis Double
dan mengembalikan Double.
>> Perhatikan bahawa di sini kita tidak mempunyai jelas ditakrifkan nama-nama hujah-hujah
bahawa fungsi ini menerima.
Dan dengan itu kita melihat kita boleh merujuk kepada mereka parameter menggunakan $ 0, $ 1,
sebagainya dan sebagainya, bergantung kepada bilangan parameter yang digunakan
dalam fungsi ini.
>> Ini adalah sesuatu yang anda akan untuk melihat banyak kurungan ini kerinting terbuka
definisi diikuti dengan $ 0, dan kemudian beberapa operasi,
dan kemudian kurungan kerinting tertutup.
Itulah fungsi tanpa nama yang melaksanakan operasi ini.
Ia mempunyai parameter ini di mana ia adalah jenis adalah disimpulkan.
Yang Parameter pertama adalah $ 0.
Dan beberapa operasi adalah berlaku pada yang $ 0.
>> PENONTON: Jadi tanda dolar bermakna parameter pada dasarnya,
dan 0 bermakna yang pertama?
DAN Armendariz: Itu betul.
Jadi tanda dolar pada asasnya bermakna parameter, dan 0 bermakna yang pertama.
Tetapi ia berfungsi secara khusus dalam kes ini di mana saya telah tidak dinamakan
hujah-hujah dalam fungsi tanpa nama saya.
>> PENONTON: Adakah Perl atau sesuatu yang mempunyai tanda ini dolar, dolar 0 di sana?
DAN Armendariz: Adakah yang, saya minta maaf?
PENONTON: Adakah Perl mempunyai dolar ini 0, dolar 1--
DAN Armendariz: Saya tidak terlalu biasa dengan Perl,
tetapi PHP apa yang mentakrifkan pembolehubah berdasarkan tanda-tanda dolar.
Dan mungkin ada beberapa bahasa yang mempunyai ciri-ciri seperti ini.
Malah, Swift meminjam banyak ciri-ciri seperti ini
dari banyak bahasa lain.
Kami melihat petunjuk Python di dalamnya.
Definisi jenis seolah-olah datang dari OCaml.
Dan kita mempunyai hanya sejumlah besar barangan dari banyak bahasa.
Itulah salah satu yang bagus perkara tentang Swift
adalah bahawa ia mengambil banyak terbaik idea daripada sekumpulan bahasa
dan shoehorns mereka semua bersama-sama ke dalam satu bahasa super.
Malah, jika anda membenarkan saya untuk terus meniup fikiran anda,
jadi kami telah melakukan semua ini.
Kami mungkin boleh memudahkan ini sedikit sedikit demi menyedari bahawa, sudah tentu,
Swift mempunyai exponentiating yang fungsi terbina dalam.
Jika saya mengimport Darwin, yang hanya perpustakaan yang
mempunyai fungsi dipanggil ini pow, kini Saya boleh memudahkan tanganku fungsi
sebagai berikut.
Ia akan kembali fungsi tanpa nama ini.
>> Tetapi melihat bagaimana mudah ini sekarang.
Ini adalah satu fungsi tanpa nama yang adalah menerima beberapa jenis data,
dan ia akan menjadi salah hujah secara khusus,
dirujuk pada $ 0 yang adalah jenis Double.
Ia akan kembali jenis Double.
Tetapi kenyataan return kini tersirat.
>> Dan ia adalah gaya yang tepat ini yang adalah sangat, sangat lazim dalam Swift,
seluruh tempat.
Kita akan melihat ini sepanjang masa dalam Swift.
Jadi saya menunjukkan semua ini untuk anda kerana sintaks ini.
Ini adalah perkara biasa untuk melihat, yang bermakna ia
adalah fungsi tanpa nama yang melaksanakan
beberapa kuasa pada hujah-hujah ini.
Dan ada pulangan yang tersirat.
Oleh itu, ia adalah benar-benar perkara yang sama bagi kami untuk mengatakan ini, di sini.
>> Kerana kerinting ini kurungan adalah fungsi,
kami melakukan operasi ini kepada hujah pertama.
Kita akan kembali itu.
Tetapi pulangan luar ini adalah kembali bahawa fungsi keseluruhan,
bahawa fungsi tanpa nama keseluruhan yang kita telah buat.
Apa-apa soalan lain?
Baiklah, saya tidak tahu sama ada anda semua bersedia untuk ini,
tetapi kita boleh pergi lebih gila dengan Swift.
Anda bersedia?
OK, ini adalah besar.
>> Sekarang kita benar-benar mempunyai keupayaan untuk, Swift, kerana bagaimana modular
dan bagaimana protokol berasaskan ia adalah, untuk menentukan pengendali kami sendiri freaking.
Seperti dalam kes ini, kita tidak mempunyai operator untuk exponentiation-- baik,
untuk kuasa sesuatu persembahan.
Tetapi saya boleh, dalam Swift, menentukan yang baru pengendali yang tidak tepat itu.
Jadi dalam kes ini ada sekumpulan sintaks sini.
Dan saya akan membolehkan anda untuk melihat ia di rumah apabila anda melihat ini.
Tetapi kita menentukan infiks ini operator, **, yang akan kemudian membenarkan kami,
dengan menentukan apa yang fungsi ** sebenarnya
tidak, untuk menerima tangan kiri sisi dan sebelah kanan,
dan kemudian kembali eksponen yang sebelah kiri ke sebelah kanan.
>> Dan sekarang semua Saya tiba-tiba telah mencipta satu pengangka baru.
Jadi 2 ** 3 bermakna 2 kuasa ketiga.
[Mind Blowing BUNYI] ini oleh sendiri perlu membuat anda menjadi seperti,
OK, skru C. saya akan Swift sepanjang jalan.
Ini bagus.
Ini adalah cukup hebat.
>> Walaupun ini adalah satu contoh yang baik.
Tetapi saya tidak pernah sekali di luar contoh ini sebenarnya
ditakrifkan pengendali saya sendiri.
Tetapi masih, ia menunjukkan banyak kuasa Swift
dan mengapa ini sebenarnya benar-benar sangat sejuk.
OK, ya?
PENONTON: Jika anda menentukan operator anda sendiri,
bagaimana anda tahu anda tidak sengaja cuba dan mewujudkan pengendali itu
di suatu tempat di C, seperti tersembunyi di suatu tempat di Swift,
seperti satu kabur yang mungkin tidak dilihat sebelum ini.
>> DAN Armendariz: Jadi, jika anda cuba untuk menentukan operator anda sendiri,
terdapat risiko mentakrifkan berbanding dengan pengendali yang sedia ada.
Yang masuk ke tahap perincian yang Saya tidak fikir kita mempunyai masa untuk pergi ke atas.
Tetapi itu adalah risiko.
Dan itulah sebenarnya sebab utama Saya tidak menggunakan simbol karet, yang
apabila kita menaip kuasa, kita biasanya menggunakan 4 sedikit karet 5 atau sesuatu
seperti itu, hanya apabila kita berada Gchatting teman atau apa sahaja.
Tetapi dalam kes itu, yang benar-benar akan menyebabkan perlanggaran.
Oleh itu, saya dielakkan hanya kerana Saya kebetulan tahu dalam kes ini
bahawa yang akan menyebabkan perlanggaran itu.
>> Baiklah.
Sekarang malangnya, untuk tujuh minit terakhir,
Saya perlu terus bertiup minda anda sedikit.
Jadi izinkan saya untuk menunjukkan kepada anda beberapa perkara lain juga.
>> Kami telah menunjukkan anda idea ini mempunyai fungsi-fungsi ini tanpa nama,
penutupan ini yang membolehkan anda untuk jenis lulus fungsi sekitar.
Anda boleh kembali mereka.
Anda boleh memanipulasi mereka.
Anda boleh melakukan pelbagai barangan gila.
>> Tetapi satu perkara lain yang berlaku untuk menjadi yang berguna
adalah keupayaan untuk, yang bertentangan untuk kembali fungsi-fungsi
dalam satu majlis, meluluskan fungsi sebagai parameter kepada fungsi yang lain.
Anda mungkin berfikir baik mengapa di Bumi akan saya mahu melakukan sesuatu seperti itu?
>> Nah, mari kita mengatakan bahawa saya mahu untuk mengambil pengendali ini yang saya
bekerja keras untuk mencipta dan menggunakan kepada sekumpulan nombor yang berlainan
dalam array.
Jadi, dalam kes ini saya mempunyai pelbagai integers-- 1, 4, 7, 2, 5, 10, 56.
Dan saya mahu menggandakan mereka semua.
Cara yang kita akan biasanya melakukannya adalah untuk hanya menulis
yang mudah untuk gelung yang iterates lebih semua daripada mereka
dan melaksanakan beberapa jenis operasi persegi ke atas mereka,
memasukkan nilai-nilai baru ke dalam yang baru berubah-ubah, atau lebih tepat, keselesaan dan kemudahan baru di sini.
Dan nilai pengeluaran hasil maka semua orang-orang tatasusunan,
atau sebaliknya semua orang-orang elemen sekarang kuasa dua.
>> Dan kita boleh melakukan perkara yang sama perkara yang cubing itu,
tetapi loceng penggera sedikit sepatutnya dapat terkeluar
mengatakan bahawa mungkin ada beberapa cara yang kita akan
dapat memudahkan ini sedikit.
Dan sebenarnya ada.
Bagaimana jika kita boleh mewujudkan fungsi yang membolehkan kita
untuk menerima, sebagai pemangsa, fungsi?
Jadi dalam kes ini, mengambil melihat hujah-hujah ini.
Kami akan menerima senarai beregu.
Dan kemudian kita akan untuk menerima fungsi
dalam pembolehubah yang dipanggil f yang akan mengambil Double dan dapatkan Double.
Dan seluruh output fungsi ini keseluruhan
dipanggil mapper akan kembali pelbagai dipanggil dua kali.
>> Apa ini maka akan membolehkan saya untuk lakukan adalah untuk melelar senarai itu
dan melakukan perkara yang sama, tetapi sekarang memohon fungsi yang pada setiap
daripada nilai-nilai individu dalam senarai itu.
Jadi, saya tidak benar-benar tahu apa f.
Tidak kira kepada saya.
Tetapi selagi ia mengambil dalam Kelamin, melakukan beberapa operasi di atasnya,
dan kemudian mengembalikan Double, saya kemudiannya akan menjadi
dapat memetakan fungsi yang seluruh setiap elemen tunggal dalam senarai.
>> Dan ini jenis pengaturcaraan adalah dipanggil fungsi aras tinggi,
di mana kita fungsi lulus sekitar sebagai parameter
dan melakukan perkara-perkara dengan fungsi.
Ia adalah jenis seperti mengambil semua ini idea-idea yang kita telah belajar dalam CS50
dan mengambil mereka semacam of ke peringkat seterusnya.
Dan ini adalah semua barangan gaya CS51.
Dan dengan itu kita akan pergi secara mendalam lebih dalam kelas seperti itu.
>> Tetapi ini juga penting di sini kerana kita
melihat banyak fungsi yang digunakan dalam Swift
yang pada dasarnya tidak ini, di mana kita mempunyai
beberapa nombor, ada pelbagai nombor.
Kami akan terjadilah bahawa array ke dalam mapper kami.
Dan kita juga akan lulus beberapa fungsi, yang
kami telah yang telah ditentukan di sini.
Ia akan menjadi persegi.
Dan kita akan kemudian persegi semua nombor-nombor
dan menyimpan itu ke dalam keputusan ini di sini.
>> Jadi kes ini kita telah ditakrifkan kami fungsi sendiri dipanggil mapper.
Tetapi perkara ini tepat adalah, sebenarnya, dibina ke dalam Swift.
Terdapat pelbagai fungsi dipanggil peta.
Ada fungsi peta, ada mengurangkan fungsi,
dan ada fungsi penapis, yang pada dasarnya menggunakan fungsi
untuk setiap elemen tunggal dalam senarai untuk mengubah suai mereka dalam beberapa cara.
>> PENONTON: Jadi kerana anda mengubah data ke dalam format lain
melalui function-- yang
DAN Armendariz: Betul.
Ya, jadi fungsi bahawa kami menerima
merubah data dalam beberapa cara.
Dalam kes ini, kita sama ada menyegiempatkan, atau kita telah cubing itu,
atau benar-benar, kita boleh melaksanakan tiada operasi di atasnya sama sekali.
>> Tetapi mari saya tunjukkan kepada anda kemudian bagaimana ini akan kelihatan dalam amalan.
Dan sekali lagi, saya menjalankan sedikit masa. jadi saya tidak
akan dapat pergi ke atas semua kod sumber di sini secara terperinci.
Tetapi saya menggalakkan anda untuk berbuat demikian.
Kami akan hantar secepat mungkin selepas ceramah ini.
>> Tetapi jika anda mengambil lihat pada ini, menganggap bahawa kita mempunyai senarai nombor,
pelbagai nombor dalam ini pembolehubah dipanggil nombor.
Kemudian kita mahu untuk melaksanakan ini operasi penapis pada nombor-nombor tersebut.
Jadi penapis yang lebih tinggi fungsi agar
menerima pelbagai dan juga fungsi.
Dan pada setiap elemen dalam yang pelbagai, ia melaksanakan fungsi itu.
>> Jika fungsi pulangan benar, ia menyimpan item tersebut.
Jika fungsi yang mengembalikan palsu, ia melemparkan jauh item tersebut.
Dan kemudian ia kembali senarai yang kemudian terdiri semua
item-item yang telah ditapis.
>> Jadi dalam erti kata lain, ini adalah idea yang sama, gradebook itu.
Kita mungkin mempunyai pelbagai gred ke ini nombor nilai dipanggil.
Boleh 100, dan 70, dan 40, sebagainya dan sebagainya.
Apa penapis ini tidak adalah notis bahawa ini adalah bahawa gula sintaksis
dengan fungsi tanpa nama.
Ini adalah satu fungsi tanpa nama berkata bahawa parameter bahawa saya menerima
akan menjadi, jika ia adalah lebih besar daripada 70,
maka ini akan kembali benar, bermakna barang yang akan disimpan dalam penapis ini.
Jadi mari kita menjadi sedikit lebih konkrit tentang perkara ini.
Jika saya mempunyai pelbagai ini nombor dan ia terdiri daripada 100, 70, dan 40,
Saya melaksanakan penapis ini kuasa pada setiap seorang daripada mereka.
Supaya pertama adalah nilai ini daripada 100.
100 lebih daripada atau sama hingga 70 adalah benar, yang
bermakna 100 disimpan di dalam salinan baru ini pelbagai ini.
70 juga berlalu.
Tetapi 40 tidak.
Jadi apa yang dikembalikan dalam passingCount adalah pelbagai unsur-unsur 100 dan 70--
100, koma, 70.
Mereka itulah hanya dua barang-barang yang disimpan.
Dan sebagainya sebab saya cepat pergi melalui banyak ini jenis aras tinggi
perkara-perkara yang kerana ini adalah yang biasa perkara yang anda akan lihat dalam Swift cantik
kerap, sedang melakukan sesuatu operasi menggunakan ini Sintaks fungsi tanpa nama.
>> Ada beberapa barangan sejuk.
Suis benar-benar berkuasa dalam Swift, Maksud saya seperti gila, gila kuat.
Anda boleh menggunakan suis, dan anda sebenarnya boleh memohon mereka
kepada julat, yang jenis gila, dan melakukan barangan mewah seperti itu.
>> Tetapi dalam beberapa minit terakhir, Saya hendak melangkau ke hadapan agak jauh
dan menunjukkan contoh khusus tentang bagaimana kita boleh membuat dalam aplikasi iOS menggunakan Swift.
Oleh itu, apabila anda lakukan ini, anda akan perlu untuk mengambil
yang kelihatan at-- pada Apple dokumentasi, mereka
mempunyai banyak tutorial benar-benar baik untuk membuat permohonan pertama anda.
Dan saya menggalakkan anda untuk melakukan itu kerana mereka membawa anda
melalui semua langkah-langkah apa yang perlu klik pada untuk membina satu permohonan IOS.
>> Tetapi di sini kita mempunyai aplikasi iOS ini.
Dan ia adalah satu aplikasi yang agak mudah benar-benar.
Jika saya menjalankan ini, mari saya tunjukkan anda apa yang ia kelihatan seperti.
Apa yang pada dasarnya tidak adalah ia menarik dari internet fail JSON
bahawa saya telah disimpan pada pelayan.
Dan bahawa fail JSON mentakrifkan imej yang membolehkan
saya kemudian memutar, pada saya app, imej dari pelayan web saya.
>> Oleh itu, saya ada di sini getNextImage.
Ia memuatkan imej dari internet, dan kemudian memaparkan ia pada skrin.
>> Jadi ia adalah agak mudah.
Tetapi matlamat di sini adalah untuk menunjukkan anda bagaimana kita boleh menggabungkan perkara-perkara
dari beberapa minggu kedua CS50 ke dalam satu aplikasi iOS yang sebenar.
Dalam erti kata lain, mungkin salah satu daripada perkara yang anda akan mahu lakukan
adalah untuk mempunyai aplikasi iOS yang boleh tarik data dari internet
dan menunjukkan pengguna beberapa maklumat.
Yang sepenuhnya titik kod sumber ini di sini.
>> Jadi ada banyak yang boleh dikatakan tentang bagaimana untuk melakukan pembangunan iOS yang sebenar.
Terdapat banyak sintaks gila bahawa kita tidak pernah melihat agak lagi
seperti kelas, apa kelas yang sebenarnya.
Kami sebahagian besarnya boleh mengabaikan yang pada masa ini.
>> Tetapi notis bahawa kita telah terkandung dalam ini pelbagai perkara
bahawa kita telah pun melihat seperti fungsi yang mempunyai nama-nama tertentu.
Dan apabila kita memberi mereka berfungsi nama nama yang betul
yang dijangka oleh IOS, sebenarnya ini berasa sedikit ajaib.
Tetapi apabila anda membuat aplikasi iOS, terdapat
adalah nama-nama fungsi tertentu yang dipanggil oleh telefon itu sendiri
sebagai permohonan is loading untuk mencuba untuk mewujudkan proses yang sebenarnya
berjalan permohonan anda.
Jadi sekali lagi, ada banyak perkara yang saya perlu menyembunyikan di sini dalam usaha untuk kita
bercakap tentang perkara ini secara khusus.
Tetapi saya menggalakkan anda untuk melihat mungkin seminar iOS yang lain, tetapi juga beberapa
daripada talian tutorial yang melakukan pekerjaan yang lebih baik untuk menerangkan
maklumat tertentu.
>> Tetapi kita dapat melihat beberapa perkara yang adalah menarik dari kod di sini.
Perhatikan yang kita ada jika kenyataan.
Dengan cara ini, salah satu yang penting perkara tentang jika kenyataan
adalah bahawa kurungan sekitar Ungkapan Boolean adalah pilihan.
Tetapi pendakap kerinting tidak adalah pilihan, tidak kira berapa sedikit atau banyak baris kod
anda ada dalam jika kenyataan.
Anda tidak boleh mempunyai jika kenyataan tanpa pendakap kerinting di Swift.
>> Dan ini adalah, baik, jenis bodoh.
Tetapi ada sebab-sebab sejarah untuk itu.
Ia sepatutnya menyelamatkan kamu dari diri sendiri.
Seperti ini sebagai contoh, anda tidak boleh menghapuskan pendakap kerinting sekitar yang
jika kenyataan.
Mereka adalah sebenarnya diperlukan.
Jadi saya menggalakkan anda untuk kita lihat ini.
Tetapi ada satu lagi membina yang saya mahu
untuk menunjukkan kepada anda tentang Swift yang baru kepada Swift 2.0 berbanding
untuk versi yang lebih lama Swift, yang berikut.
Mari kita lihat di mana saya meletakkan ia di sini?
>> Jadi dalam fungsi ini dipanggil fetchJSON, fungsi ini
bertanggungjawab untuk menarik yang JSON memfailkan dari URL, yang hanya kebetulan
berjalan di IDE CS50 saya.
Saya hanya mula Apache, meletakkan fail JSON saya di sana,
dan saya dapat kemudian tarik yang data dari internet menggunakan
fungsi ini dan URL ini, yang disediakan oleh telefon.
Ia disediakan oleh perpustakaan yang anda gunakan apabila
yang anda lakukan beberapa IOS pembangunan aplikasi.
>> Perhatikan di sini bahawa ada ini luar biasa membina sintaksis dipanggil pengawal.
Dan benar-benar semua ini adalah dalam Swift adalah satu cara untuk mengesahkan
bahawa beberapa perkara yang mempunyai telah dipenuhi sebelum anda
meneruskan dengan seluruh fungsi.
Jadi saya boleh mempunyai, menggunakan jenis pilihan ini,
Saya boleh mendapati URL dengan menjalankan fungsi NSURL ini
dan menyimpan itu ke dalam URL berterusan, dan kemudian memeriksa
untuk melihat jika URL adalah sifar, kerana ia itu akan kembali jenis pilihan.
Dan jika ia adalah sifar, maka saya akan mencetak kesilapan dan akan terus pulang.
>> Tetapi sebaliknya, apa pengawal membolehkan kita lakukan adalah perkara yang sangat,
tetapi memastikan bahawa ia adalah sebenarnya kes yang url
telah benar yang ditetapkan oleh NSURL.
Dan jika ia, maka ia melangkau lebih ini, dan ia
akan membolehkan anda untuk meneruskan url setelah betul ditakrifkan.
Tetapi jika ia adalah kes yang url adalah tidak betul ditakrifkan,
jika fungsi ini mengembalikan ralat atau beberapa perkara lain yang tidak dijangka
sebenarnya berlaku, membina pengawal ini membolehkan kita maka output bahawa kesilapan
dan pulang dengan segera.
Ya?
>> PENONTON: Jadi ia adalah jenis daripada seperti jika kemudian yang berlainan?
DAN Armendariz: Ia adalah jenis seperti jika kemudian lagi, ya,
kecuali url ini kemudian ditakrifkan untuk segala-galanya di bawah ini.
Jika ia melepasi pengawal ini, maka ia sebenarnya akan diisi dengan data
dan boleh digunakan dalam baki kod sumber dalam fungsi anda.
Jadi, saya mengesyaki bahawa anda akan mula melihat pengawal ini juga.
Dan ingat bahawa.
>> Jadi hanya melihat beberapa lain perkara, hak ini di sini ialah apa,
yang anda fikir, hanya berdasarkan kepada apa yang kita bercakap tentang sebelum ini?
>> PENONTON: Fikirkan ia akan berjalan dalam senarai?
>> DAN Armendariz: Jadi itu dekat.
Ini adalah satu fungsi yang kita menentukan.
Dan kita memasukkan fungsi yang sebagai argumen kepada fungsi ini di sini.
>> PENONTON: [didengar] jika tidak sifar.
Jadi ia adalah dalam senarai, bukan?
>> DAN Armendariz: Jika ralat tidak sifar, supaya is-- jadi saya perlu untuk menatal.
Nah, mari kita lihat, saya tidak boleh benar-benar tatal ke kanan di sini.
kesilapan adalah hujah yang sedang dihantar ke fungsi tanpa nama ini.
Ini adalah satu fungsi tanpa nama.
Ia tidak mempunyai nama.
Tetapi kami menerima ketiga-tiga hujah-hujah, data, tindak balas, dan kesilapan.
Dan ia akan kembali tidak sah, jadi ia tidak akan kembali apa-apa.
Dan ini adalah kandungan fungsi tersebut.
Dan kemudian kita mempunyai akses di dalam yang fungsi kepada setiap hujah-hujah ini.
>> Jadi ia adalah keturunan yang masih kecil lawatan bahasa.
Tetapi saya berharap dengan ini, mudah-mudahan anda mengambil
lihat beberapa tutorial khusus untuk pembangunan iOS dengan Swift,
terutamanya jika anda pergi ke Apple pemaju web page--
mereka mempunyai banyak benar-benar baik tutorial untuk anda bermula.
Tetapi mudah-mudahan hanya jam ini bercakap mengenai sintaks itu sendiri telah memberikan
anda cukup untuk memulakan dengan itu.
>> Kami akan menyiarkan semua sumber ini kod pada laman web seminar
dengan seberapa segera yang mungkin, dan juga slaid supaya anda mempunyai rujukan untuk semua orang.
Tetapi nasib baik dengan projek-projek anda.
Dan terima kasih semua kerana sudi datang.
>> [Tepuk tangan]