>> [音樂播放]
>> DAN AMRMENDARIZ：每個人， 歡迎到CS50研討會上，
iOS應用開發與斯威夫特。
我是丹Armendariz環，我就是一個導師 你們是哈佛計算機科學。
>> 而接下來的一個小時將是 盡可能多的東西旋風之旅
關於這個話題，因為我們能適應。
我將發布所有的源代碼 你會今天在網上看到的。
我們可能不能夠 其實去了一切
我是說我 顯示你在這個時候。
但至少希望通過 的源代碼的註釋，
你就可以揣摩什麼 究竟發生了那些事
我們不太去。
>> 的整體，該結構 今天的演講將是如下。
我們將開始做了一些基本的 語法與雨燕的語言，
進入一些更高級 雨燕語言的語法。
由於語言 真的是現代，它
有很多高水平 功能事情，我們還沒有
整個CS50見於C，或 甚至一些其他語言
我們已經開始 使用CS50，如PHP，
所以我將不得不嘗試 還介紹了一些主題，
相關的高級語言 你可能不深入看到CS50，
但你會在後面看到的 計算機科學課程。
因此，這將是一個 緊湊小時。
請隨時讓我 知道，如果你有任何問題。
所以，如果你有興趣 在做開發
與雨燕，還是真的 任何iOS應用的開發，
有一對夫婦的要求。
首先，你必須要使用 在Mac上，在實例運行
我們將要使用的今天， 操作系統版本比較新
十，在這種情況下，我跑X 10.5。
您可以在運行10.11，如果你想要的。
但一切，你要去 看到的是，涉及的Xcode 7及更高版本，
它具有最新的版本 斯威夫特，這也是雨燕2.0​​。
這其實是一個相當 重要區別。
很多語法有 漂亮顯著改變
在某些情況下，從夫特1.0， 這是去年發布的，
以雨燕2.0​​，這 剛出來的時候，今年秋天。
所以，我們要展現雨燕2.0​​。
很多的東西， 你搜索在線
當你試圖獲得更多的 關於各種事物的信息，
你可能想明確地 搜索斯威夫特2
而不是只是普通的老斯威夫特使 確保你得到正確的語法。
>> 事實上，這通常是真實的。
有較快的發展量 發生在雨燕語言
自從蘋果公司發布了它，我覺得 是什麼，它是一個一年多一點
現在。
而一切都變了 急劇那個時間。
所以，不要感到沮喪 如果，當你環顧四周
對雨燕或主題如何完成 一些使用一些示例代碼
或東西，它不 在雨燕2.0​​的實際工作。
請確保你正在尋找 針對該版本
以盡量減少不同的效果 版本和那些各種各​​樣的事情。
>> 我會嘗試指出只是一些事情 這是不同的舊版本。
但是，這件事情要注意。
這可能將是 最令人頭痛的一個
你將與雨燕是尋找 示例代碼是舊的，甚至只是
通過幾個月，欲以 它在你的更現代的項目。
它只是根本不起作用。
你得到編譯器錯誤，語法 錯誤，各種瘋狂的東西。
因此，只要有耐心 這一點，你會希望
有一個相當不錯的體驗 與雨燕的整體。
>> 現在，您可以真正join--，我希望 我們其實還是有這本year--
CS 50的蘋果應用程序 開發團隊，
將允許你安裝任何應用程序 您在您的iOS設備上創建。
因此，看看這個網址，如果 你有興趣這樣做。
>> 所以，只是一對夫婦的 東西約雨燕本身。
它是編譯型語言。
但你會看到一些 那我們使用的功能
允許它也用於比特 像一個解釋的方式為好。
>> 很多語法是借來的 從C.它是基於並寫入C.
因此，我們會看到， 有很多外賣的
從現有的知識 從C，我們可以移植到斯威夫特。
>> 但有些事情 讓它從C很大的不同
這是非常強類型。
有自動內存管理。
你不會有 用malloc或免費的任何地方。
它是專為通用性。
所以，換句話說，你可以用它 種種情境，從Apple關注
到iPhone一路攀升到OS X，和 甚至有些服務器，甚至一些腳本。
但是，我們會看到， 支持腳本
是還沒有應用的 這是在其他語言。
因此，最有可能你會使用 這個專為開發
在你的Mac或iPhone。
>> 而且它有很多的現代特色。
和很多這些東西的東西， 我們要試著今天在這裡講話，
但坦率地說也是我們的主題， 我們可以投入全部課程。
事實上，CS 51，這是 提供下學期，
集中了大量有關這些主題 這說明如下。
所以，你可以花一整個學期 了解這些東西。
但是，我們要嘗試 打通他們
至少夠你 可以理解的
外出時你看看 在斯威夫特程序
並能夠破解你的方式 通過它進行最後的項目。
>> 現在的最佳​​方法之一，你可以 獲取更多相關信息
坦率地說只是通過蘋果 為雨燕提供的文檔。
有很多的API 可用。
這是一個很好的大本營您 尋找，具體的事情你
想與涉及的iOS的API。
如果你想使用相機 例如，你可以開始尋找在這裡，
，還可以使用谷歌和堆棧 溢出，你通常會。
>> 在此有任何疑問 之前，我們在正確的跳？
好吧。
讓我們繼續。
>> 因此，首先，我有一個 的示例文件數量。
我要去嘗試步驟 通過他們比較快。
這是世界您好文件斯威夫特。
這很簡單。
有辦法更多評論 不是有實際的代碼。
請注意實際的代碼是在 最底層的14行。
它說，打印。
然後它是一個函數調用。
我們正在傳遞到它 字符串名為Hello CS50。
請注意，有沒有分號。
請注意，沒有INT為主。
有沒有一個 克魯夫特，我們曾與C.
當我們以這種方式使用SWIFT， 這僅僅是寫在一個文本文件
並存儲在我的電腦上，然後 我可以編譯並運行它。
>> 請注意，在這裡我 不使用CS50 IDE。
這是假設我 運行，並且我在OS X中，
而且我已經安裝的Xcode 本機為了使該上
實際功能。
但是，這僅僅是一個普通的文本文件 我們就可以編譯和編輯。
所以，讓我們來看看這實際上是如何工作的。
如果我想編譯它？
swiftc 1.swift。
經過一個或兩個時刻， 可以看到，我們現在有
編譯成一個名為1的文件這一點。
現在我們已經印製了CS50， 我們的Hello World應用程序相當。
>> 注意一件事是 還有的是，在默認情況下，
我們沒有輸入 A / N打印新的生產線。
默認情況下，在打印功能 斯威夫特將打印新的生產線為您服務。
您可以通過可選的附加 參數來告訴它不這樣做。
但谷歌關於它的更多信息。
默認情況下，它會做的打印線。
>> 好吧，讓我們繼續前進 然後向一些其他的事情。
那麼怎樣才能真正定義變量？
我們可以做使用的 一個兩種方法。
而我要的人告訴你 關於第一個是這讓定義。
這一點很重要 因為有效
我們正在做的事情是定義一個常數。
我們將創建一個變量， 或者更確切地說，一個恆定的叫名字，
提供給它的一些數據 - 這種情況下，串丹。
但是，通過使用這讓 關鍵字，我們說
這個變量 - 或 再次constant--稱為
名字是永遠不會改變。
這將在整個是不可變的 這一計劃的持續時間
或在整個 上下文的持續時間
即該變量是可用的。
>> 這是非常重要的，當 你有一些數據，是不是
要在你的程序改變， 你會看到各種各樣的例子
什麼時候我們要使用 讓相對於其它語法，
您使用讓它非常重要 只要有可能，因為這將通知
它是語言 不會改變，
和它實際上可以執行 很多優化工作
提高速度和 你的程序的安全性。
而到安全，我的意思是不能讓 瘋狂的錯誤，它崩潰
我們可能會 見慣了在C.
>> 然後我們可以使用字符串插值 要在字符串中封裝此。
因此，我們可以在此看到 打印線，打印你好，
然後用反斜杠開括號， 然後我的變量的名稱，
在這種情況下恆定， 關閉括號。
我本質上再敷上 這個變量叫名字的內容
內的字符串，然後 印刷有結果。
>> 還有另一個改變這個文件 這就是我，在最高層，
放在一個家當線， 基本上只是規定
我想使用 斯威夫特解釋器，
意味著我不再有 編譯這個特定的程序。
我可以運行它像它自己的腳本。
但是，這是，在這種情況下，後面 該場景被編譯，然後
正在運行。
這只是看不見我們。
>> 好吧，讓我們繼續前進。
所以這是一個有點掛羊頭賣狗肉 剛剛發生過。
我給你我 可以定義一個常數。
我可以提供一些數據來做到這一點。
但在這種情況下，請注意，我沒有 實際上指定數據的類型
這是。
這是因為 編譯器，雨燕能
推斷只是基於數據的類型 對，我把它放在數據。
因為它知道，通過評估該 變量就在這裡，這個數據正確
這裡，它知道它是一個字符串。
所以這個常數的名字因此 將是一個字符串，以及。
>> 但是，我們也可以明確 關於這類型
我們將用於 常數或變量
通過使用此語法instead-- 讓名冒號字符串等於
丹，在這種情況下意味著我們 要定義常量叫名字。
這將是String類型。
並且該值將是丹。
現在其他的方式 我們可以創建variables--
而這些都是可變變量，這 意味著我們，事實上，將
某個時候改變自己的內容 在上下文的持續時間
即該變量defined--我們 使用var關鍵字，而不是讓。
但同樣，在默認情況下，除非你知道 你需要處理的數據，
嘗試使用我們的 性能改進。
>> 在這種情況下，我可以再 指定的數據的類型
我們期望得到的內部 這家名為標籤的新變量。
這將是一個字符串。
而我們要那麼串聯 兩個字符串，字符串Hello，
和字符串所代表 變量，或者更確切地說，常量名。
>> 因此，這是很好的，因為這 是有點像PHP的，因為我們
有非常簡單的字符串連接。
我們不必以自動 使用任何類型的內存管理
以增加的大小和做 任何形式的有趣的事情出現。
這個工程，因為我們實際上期望。
>> 好吧，這個問題嗎？
>> 現在其他的原因， 我們需要你有足夠的能力
能夠定義什麼 數據變量的類型是
是因為有時候我們不 要初始化變量
以在一些數據 點的定義。
因此，在這種情況下，讓我們說 我要開始輸入
部分牌號為一年級的書。
嗯，我知道了一個 我想成為變量
將是一個可變的檔次。
我們也知道，我們 希望它是一個整數。
但也許我們還不 有級可用。
>> 在斯威夫特，你必須 定義數據的類型
是與一個相關聯的 變量或常量讓
之前，你其實可以 使用該變量。
因為它是強類型， 你有一個類型關聯
這些變量。
>> 因此，在這種情況下，如果我沒有正確 初始化先用一定的價值，
那麼我要告訴斯威夫特什麼 我期望得到的數據類型。
而且它會繼續保持 相同的數據類型
整個項目的歷史。
>> 現在，你可能會盡快誘惑 我創造了這個級別的變量
並提供了它的一個 如果我的100的整數，現在
想嘗試來連接 一個字符串，該整數，
也許會仍然使用 該字符串連接運算符
像我們以前那樣，只需幾行。
但不幸的是， 這實際上不是
工作，因為你是 本質上表演
上兩種不同類型的操作。
>> 現在，這是其他非常不同 語言如PHP這是真的
loosey鵝與他們的那種類型。
他們只是想，是啊， 什麼，我不在乎。
只要給我一個類型， 也許我會做正確的事。
>> 在這種情況下，雨燕 極為嚴格的有關類型
你正在處理。
這求和運算符 或連接運算符
基本上具有幾個 不同的可行方案。
你可以做總和 與整數，或者你
可以做字符串連接，並 也許一些其他的事情也是如此。
但如果運營商不承認 什麼是在它的兩側
或者更確切地說，這些的組合 兩種類型，是不是它的預期，
然後它會導致失敗。
>> 因此，在這種情況下，這是什麼意思 以有一個字符串加上整數？
孔中的上下文 這一點，我們可能需要
做字符串連接操作。
但當然計算機 沒有那種背景。
因此，我們需要提供 該附加信息
讓它知道這是什麼 就是我們想要做的。
>> 因此，換句話說，事實 該斯威夫特是強類型
意味著你必須做 額外工作一點
得到它來操作 你想辦法。
但是，結果，它是安全。
一旦你有拿 考慮到這些類型，
事情就坦言啟動 工作得很好。
>> 所以在這種情況下，我們將然後 執行字符串連接
通過明確鑄造 整數為字符串
通過包裝它在這 大寫字母S字符串函數，
然後使用字符串連接 運營商來修改我們的標籤變量，
然後打印出來。
>> 到目前為止，一切都很好？
好吧，讓我們繼續前進。
>> 現在有各種數據 類型，我們可以在斯威夫特使用。
當你已經習慣了， 我們可以創建一個可變的數組。
而這陣只能 含有單一類型。
>> 因此，在這種情況下，我們要創建 一個整數的可變數組，
我們將調用檔次，我們將能夠 存儲在這個方括號
格式你已經長大習慣 在多種其它語言的。
但是請注意，在這裡我們是 確定幾件事情。
成績是一個可變的變量 - 我們不使用let關鍵字。
因此，這意味著我們可以修改 這個數組的內容。
這是數組類型為int， 我們可以告訴大家，
基於這些方括號這裡。
>> 現在，人們的好東西 這個是我們
有機會獲得大量的 附加信息
有關陣列只使用 一些簡單的點表示法。
因此，例如， grades.count提供給我們
項目中存在的數 數組，我們就可以訪問漂亮
輕鬆簡單的使用點符號。
>> 如果要添加其他 項目這個數組，
你不能這樣做PHP的風格 在這裡你只要明確定義，
一個給定的索引處，一些價值 要插入。
相反，使用append 在數組類型的方法
追加該項目，95，到這個列表。
>> 所以，現在這個數組具有以下 contents-- 100，0，90，85。
現在，我們已經追加 95到這一點。
>> 還有其他的方法 我們可以附加的東西。
實際上，你可以使用 求和運算符，
這將被解釋為 數組追加操作。
你也可以再追加另 陣列，其內容是70和80，
該陣列。
所以，現在我們有 在這個變量的內容
grades-- 100，0，90，85，95，70，和80。
這僅僅是一個不錯的語法 糖是斯威夫特提供給我們。
>> 因此，如果我們想求和 成績，我們也許
會想迭代 在這個循環的每個項目。
同時，我們也有，在斯威夫特，概念 for循環，你會期望。
但是，我們要說明的方式 一個範圍略有不同。
所以在這種情況下，到 總之一切，我們將
要創建一個臨時的 變量稱為總和，以便我們
保持這個數量。
>> 並注意我們的 這裡環路建設。
對於指數在0 ... <grade.count。
所以該結構，0 .. <grades.count 是一系列的操作我們在哪裡
他說，我們要創建 從0整數範圍
但不包括grades.count。
因此，這將是0，1，2，3，4， 5，直到然而，許多1
前grades.count。
>> 因此，這是不是有什麼不同，我們 將通常用於循環
你會在那裡有一些指標 變量，將其設置為0在第一，
然後集成的，直到一些 值小於項的計
該數組。
>> 因此，有一個修改 這一點，其實，
這使我們能夠很容易 設置不同類型的範圍。
如果您更改此範圍內 三個點，0 ... grade.count，
這代表範圍為0 到grades.count包容性，
這意味著該號碼也 然後包含在該範圍內。
>> 但是，這是非常方便的 對於這些具體的事情，
當我們要進行 在迭代循環
因為這些指標都是零索引， 正如我們所看到的其他語言
為好。
在此有任何疑問for循環？
>> 因此，有隱含的定義 該指數的變量，
其值從0開始，並 繼續在每個循環迭代
1至增加，直到點 等於grades.count，
在這一點，循環中止。
>> 請注意，在我們的字符串 內插在這裡，
我們實際上可以執行一些簡單的 操縱這些值。
因此，指數加1將實際 執行該值的總和
由於指數是在 這種情況下，一個整數。
在這一點上，它將 然後被轉換成一個串
插值成該字符串在這裡， 並打印出來，因為我們所期望的。 。
>> 而好處 關於陣列這裡
我們也能有 取值和設定值
用方括號作為 我們已經看到在其他語言。
>> 所有的權利，所以從這裡，我們現在 我們計算所有等級的總和。
現在的排序下一個 合乎邏輯的步驟將是
做除法運算找到 從這些成績的平均值。
但是，一些重要的東西 這裡正在發生哪些
是，這筆錢也許是一個整數。
但是，我們需要執行一些 那種雙師。
而這將是 非常重要的，當
我們要執行此操作， 因為我們在說什麼
是我們需要真正 在兩個雙打進行劃分。
再次，由於斯威夫特 非常強類型，
我們必須明確地設置所有的 其實在我們的項目雙打
執行該操作。
>> 因此，為了讓我們 執行雙師，
這是不夠的只是一個 這些項目是一個雙。
他們都必須是 雙重為了迅速
可以肯定，這 就是我們想要做的。
因此，我們會再明確類型轉換 而我們上面計算的總和
和檔次雙打的數量，和 然後執行該操作和存儲
這到這個新的變量，或者更確切地說， 這個新常數叫平均，
這將有什麼類型的，你能想像嗎？
雙，是啊。
所以在這種情況下，我們 不必指定它
因為它可以從被推斷 操作什麼樣的數據平均類型
會是。
而雨燕一般是相當不錯的 對能夠推斷出的類型。
>> 難道你想看到這個 運行，或者我可以繼續前進？
我想繼續下去。
在任何這有問題嗎？
大。
>> 現在我們要開始去 好stuff--定義功能，
和一對夫婦的其他類型是 獨特的雨燕，你有沒有
看到其他語言 直到這一點，
但它們存在於其它 語言，你可能會發現以後。
因此，首先，如果你想 定義一個函數，
你用時髦的詞定義它 函數，然後函數名，
然後在括號中的參數 您希望這個函數接受。
這些參數也必須 specify-- generally--
還必須指定數據的類型是 它們是，除非它們可以推斷。
我們會看到那個小 需要注意的只是一點點。
>> 因此，在這種情況下，我們有一個 函數調用printGradeCount。
我們將接受 變量 - 或者更確切地說，在這種情況下，
一個constant--叫成績冊。
而這將是對 鍵入整數數組。
現在有什麼東西 這是非常重要的在這裡
我希望你能理解。
也就是說，默認情況下，這些參數 輸入時該功能的
有一個隱含的let關鍵字定義， 這意味著我不能修改這個
在這裡成績簿變量。
而排序是有道理的， 因為你傳遞的數據研究。
你也許不希望它 從下你變了。
它可以明確地提 這是一個變量通過將
這裡var關鍵字。
但是，這是我們已經一個疑難雜症 人們注意到，在過去做
是，他們以為這是怎麼回事 是變量時，事實上，它
是一個常數。
>> 好了，所以在這裡的話，在這種情況下， 我們沒有指定任何返回類型。
我們會告訴你怎麼做 在短短的時刻。
但是請注意，在這裡，我們有 只是一個簡單的，如果條件。
如果成績簿是 空，在這種情況下
是這個整數的只是財產 陣列，那麼我們打印出一些東西。
否則，我們做別的事情。
>> 很簡單，到目前為止，我認為。
但是，如果你有任何問題，阻止我。
>> 現在這個功能，平均，也需要 一些參數，或者說一個參數，
這是成績冊，而這一次 是否會返回一個double類型。
因為它是計算 的平均值和它的
要真正返回 計算出的平均呼叫線路。
>> 在這種情況下，我們指定 箭頭後返回類型。
而這可能會感到 那種怪異的在第一。
你已經習以為常 於設置返回
函數的名稱前輸入。
但是，如果你覺得這 在數學方面，
就像當你有數學 定義一個函數，
你有一些功能 輸入，它產生一個輸出。
而這正是 這是應該模仿。
還有一對夫婦其他語言 具有類似的語法為好，
但可能沒有一個 你見過在CS50。
但還是不要被它迷惑。
箭頭表示是怎麼回事 在這種情況下，要返回。
好了，我們怎麼 計算這個平均值？
好吧，如果成績簿 是空的，好，那麼我們
會返回一個0，這可能 一個合理的方式來對待這一點。
我不知道，讓我們來 回到那個在一點點。
這可能不是實際 是一種合理的方式
計算的平均如果 我們有一個空的成績冊。
>> 然後，我們就進行了總結。
請注意，在這裡我們實際上 有一個替代版本
for循環，這使我們能夠迭代 在數組中的每一個項目
並把每一個元素 到它自己的變量。
通過在指定的等級 成績冊，我們在說什麼
就是我們要含蓄 創建一個新的常數稱為
等級，是要代表 在成績簿每一個獨特的項目
每一次的for循環迭代。
所以第一次 它的運行，成績將
在成績簿中的第一項。
第二次，它會是 第二個項目，等等等等
直到成績冊有 用盡元素本身。
然後，我們就可以總結說 等級到我們的總和變數
並返回我們的平均 正如我們之前看到的。
OK，什麼問題嗎？
是？
聽眾：我有兩個問題。
第一，假設，可以 你在這一個運行的整數？
不必須是一個 雙，是正確的？
DAN AMRMENDARIZ：你能 重複這個問題？
聽眾：我可以這樣做 整數作為平均？
DAN AMRMENDARIZ：你能 做整數作為平均？
因此，返回一個整數 平均而不是雙？
>> 聽眾：Return--您 有這個權利，現在下面。
DAN AMRMENDARIZ：就在這裡，返回0.0？
聽眾：是啊，剛剛返回0。
所以這將是要么 80或85，但不是85.2。
>> DAN AMRMENDARIZ：所以在這種情況下， 所以有幾種不同的方法
要回答這個問題。
我來回答他們的訂單。
所以，如果我只是讓這個返回 0，0是一個整數值。
因此，這將導致一個 型誤差對於這種情況
因為它期待一個雙 但隨後返回一個整數。
如果我想返回一個整數，我可以。
我可以設置的返回類型 為int，這裡返回0，
而不是執行雙師。
但是，我們將 做整數除法。
所以我們以後就不會得到 一般，我們將可能期望。
但是，是的，我們可以通過修改 以這種方式的類型。
>> 聽眾：其次，你 有一個雙頂部。
但向下跌破，當你 做回雙人大床，
這已經自動 返回雙格式。
為什麼你還需要將它定義 在頂部有一個雙箭頭？
>> DAN AMRMENDARIZ：所以 在情況下，這是部分
對the--如此重複的問題， 因為這是自回歸隱
這裡的類型，什麼類型的這實際上 是，我們需要明確與斯威夫特
什麼，我們要 返回該功能的出
這樣，當它執行類型 檢查時，可確保
這就是我們實際上寫 樓下居然符合這一點。
因此，這有點像檢查 與自己的排序情況。
但是，are--
>> 聽眾：[聽不清]箭頭？
>> DAN AMRMENDARIZ：有情況下，當 我們可以指定我們可以隱
設置返回類型。
但在這種情況下，我不 認為這工作。
還有一些其他的語法 以後我們會看到。
>> 好了，所以這個來源 代碼是有點不同
因為這種分析的參數 我們正在調用該函數。
讓我告訴你它是如何工作 之前，我們實際上前進
一些有趣的事情 這是發生在斯威夫特。
>> 因此，在這種情況下，如果我只是運行此 代碼，請注意，它是做什麼
is--而種，它 給了我一個奇怪的錯誤。
我需要通過這幾個 整數作為命令行參數。
因此，讓我們來看看，150和80，然後按Enter 找出它實際上做。
它接受各 這些數值為整數。
它的輸入他們入成績冊。
然後，它執行 該平均值計算
並輸出，作為我們期望的那樣。
>> 不過，顯然有什麼東西會 與此拒絕的東西
東西作為一個整數。
正如你可能還記得，當我們 處理命令行參數
在C和其他語言，第一個 在命令行參數0個項目
列表是命令的名稱 我們實際執行。
因此，在這種情況下，我只是循環 在所有的命令行參數。
但我沒有做任何形式的花哨 檢查跳過的第一個。
我只是或明或我隱 檢查這些類型的
是整數之前，我其實 執行此計算。
>> 這就是本質 這裡發生了什麼。
對於每一個參數 該過程的參數，
我要進行一些檢查。
在這種情況下，我要去 試著先轉換
這樣的說法成整數由 執行明確的類型轉換，
因為它是，在輸入一個字符串 並沒有實際上的整數。
>> 但是，這是怎樣的一個奇怪的語法， 如果讓坡度等於INT（參數）。
實際發生的事情 這裡是非常
重要的是你用斯威夫特。
這是用什麼 所謂的可選類型。
>> 所以這個功能，INT（參數）， 返回不只是一個整數，但返回
什麼所謂的可選整數。
所以這是有點 一個類型上的類型的頂部。
那種你能想像它像 它的返回像包。
而當你打開 封裝，無論是
具有整數，這是結果，或 它具有絕對沒有在它。
而這是作為一個錯誤檢查有用 機構，因為在這種情況
我們可以看出，這是 類型轉換成功？
如果是，那麼它是實際上 將不得不內的整數。
否則，這將有一些 值，我們稱之為零，這
代表沒有整數可言。
這是真正代表什麼。
>> 所以這一點，如果建 使我們能夠解開那個包，
那個可選擇綁定。
如果我們能夠解開這 打包並發現裡面的整數，
然後我們在說什麼 這裡要說的是，我們之後會
允許設置該值成 這個常數稱為檔次。
和if語句的這一部分， if語句的頂部部分
將運行，因為那 展開是成功的。
>> 如果它只是恰巧， 有可能是一個錯誤
在這種顯式類型轉換 從字符串的整數，也許
它的值ABC為例。
而這實際上是不打算 轉換成整數。
然後，它會返回nil， 這不是一個整數。
而這個if語句以及再失敗。
成績將不會因為存在 它沒有任何整數內容。
它將運行這個else塊來代替。
是？
>> 聽眾：無為N-I-L？
DAN AMRMENDARIZ：無為N-I-L，是的。
>> 因此，這是可能之一 關於SWIFT最難的事情，
尤其是當你在 在iOS應用程序的雜草
而你實際上是試圖 做一些開發那裡。
這將是大呼小叫 你對可選的。
這將要求你的 問號和驚嘆號。
但是，一旦你的身影out--，如果你 花一些時間來搞清楚
什麼是可選的種類回事， 你會節省大量的頭痛
當你試圖 寫在斯威夫特的應用程序。
>> 它實際上是一個非常強大的功能。
而你只需要 把我的話它現在。
但是，我們會看到這種結構 有的人喜歡它
在其他一些源代碼 我們會告訴你的只是一點點。
>> 是否有任何初始的問題在這裡？
因此，重要的外賣是一個 可選的類型是那種一元類型的。
它或者具有值， 如果確實如此，那麼它
也許會有關聯的值 有了它，或者任何有沒有價值，
它是由零來表示。
這剩下的也許是 正如你所期望的。
>> 因此，讓我們斜坡上升 困難再一次。
而這個時候，讓我們來看看一些 實際存在的其他數據類型。
其中之一是詞典，它是 非常類似於Python字典。
這有點類似於在哈希表中 C.它實質上是鍵的映射
其中，鍵可以是字符串。
而當你仰望這些鍵， 這些密鑰將有一個值。
所以它不是很數組，但 相反，聯繫更緊密
一個散列映射或哈希表。
>> 讓我們來看看這是怎麼認為 我們以前的工作實際
進入源代碼本身。
如果我只是運行它， 沒有什麼發生。
它告訴我，我期待 以下類型的一些參數。
所以，我要提供給 它的一些問題集的名字，
所以pset0，也許我得了100。
而PSET1，我得到了5。
然後在考試，我 確實非常好，得到了30。
而哎呀，我在這裡打了一個空間。
>> 當我敲回車，就可以看到 它執行一些計算。
它說，成績冊為三 等級，PSET1，pset0，考試。
而成績簿有 這個特定的平均水平。
所以，再一次，我們正在努力 這一成績冊的想法，
但我們要繼續迭代 與我們的功能的複雜性。
>> 因此，在一開始，我們只是 要創建一個函數，
負責印刷的用法。
還有的這一退出 功能，將只
強制退出應用程序。
這是不是一件 你會在iOS應用使用。
這是唯一的，在這種情況下， 用命令行參數。
接下來，我們將開始走向Xcode中。
但是，這是具體的命令 線型方案斯威夫特。
>> 讓我們來看看一些 這裡的有趣的事情。
讓我們來看看，只有一對夫婦的 有趣的事情提也許
是，我的功能 印刷等級的數目，
你可能還記得，我有這樣的列表 的items-- PSET1，pset0和考試。
實際上，你可以迅速 輕鬆地做到這一點
通過採取成績簿，這是一個 字典具有鍵和值。
找到所有的關鍵就是通過 這裡的關鍵點的方法，
然後用這個joinWithSeparator， 它隨後將採取所有的關鍵
我們已經輸入了，pset1--或 抱歉，pset0，PSET1和exam--
並連接在一起 使用逗號和空格
創建一個長字符串。
這種連接操作僅僅是驚人 有用在各種情況下。
因此，這是這個joinWithSeparator。
>> 這是一件事是 改變從斯威夫特1斯威夫特2。
過去有一個 如果你的Python style--
熟悉Python--一個Python 風格的加入對字符串的方法。
但是，這已不再是 在斯威夫特2的情況。
你想，如果你想用這個 來連接東西的數組
連同一個字符串。
>> 因此，也許那麼在我們 平均前討論，
它使一點點意義 為我們設定的平均功能
是任選的，而雙 不僅僅是一個明確的兩倍。
因為我們有這樣的 不尋常的情況，其中，
如果實際成績冊什麼 已經在它沒有價值？
又該平均回報？
>> 嗯，也許在C中你 會做什麼
等提供的標記值，如 0.0，或者負數，
什麼剛表示事實 說明有一些錯誤條件
你也許實際上並不 計算該平均的能力。
那麼指定的美麗 可選的類型會做到這一點。
而我現在說這些話，但 這其實不使用選配。
但是，我們可以看到，在剛剛 分鐘，在這裡我們可以設置平均
為使一個可選的數據類型 如果它實際上返回一些數據，然後
我們將返回的數據。
否則，我們將返回 零，說這
沒有有意義的計算。
>> 讓我們轉移到別的東西。
所以從這裡開始，我們一直在尋找 所有這些例子中的命令行。
不過說真的，你打算什麼 待處理的Xcode的。
而關於漂亮的事情之一 Xcode是，特別是在雨燕，
是，我們有這個 東西叫做一個遊樂場。
和一個操場是 不是在所有的iOS應用程序。
但它可以讓你體驗 與Swift在一個非常簡單的方法。
您可以輸入所有的代碼。
它很好的語法高亮顯示在這裡。
當你創建一個新的文件，它會詢問 你，如果你想創建一個遊樂場。
但對遊樂場的好處 是在你的窗口的右側，
它實際上告訴你 從您的代碼的輸出。
所以，如果我向下滾動，我們可以看到什麼 各個行的代碼的輸出
實際情況是。
>> 因此，在這種情況下，我們要 改變方向，只是一點點
與談這真的 重要的是這種高層次的方法
該夫特操作，並且它 這種想法倒閉。
你可能已經看到了這一點 在JavaScript中一點點。
對於那些你 在CS50，封閉
在做非常受歡迎，非常好的方法 高層次的東西在現代語言。
但它也是一種很難 包裝你的頭左右的第一次。
所以，如果你在看這個 第一次，沒關係。
只要看看源代碼，看看 如果你自己看著辦吧在家裡。
>> 因此，在這種情況下，讓我們說，我們 要創造了許多代表人物
與一些固定值。
因此，在這種情況下，我可以創造一個功能。
我打算把它的力量 在生活中2，其唯一目的
是採取一些輸入和雙 它，並返回該值。
請注意，我在這裡 接受一種類型的數據。
這將是一個變量x。
這是Double類型。
我還會回到這裡一個雙。
而我只是打算做 很坦率地說，漂亮
加倍這個數值的幼稚方式。
我會告訴你為什麼 是在短短的第二個有用。
>> 請注意，在這裡，我們有這個範圍內 再次。的東西在1點
點點，2，這意味著 這種循環將運行兩次。
但是，這代表了一​​個虛擬變量。
這意味著我不是真的要 在任何地方使用該變量
在這個循環中。
我只是希望這條線 的代碼運行兩次，
無需知道 該範圍的值。
>> 因此，在這種情況下，我運行的結果 次兩次x，它本質
意味著我現蕾此值。
而這恰好 工作作為我們期望的那樣。
2的冪，傳遞的價值 2.0給我們4的輸出。
3.2工程10.24。
>> 現在，我們可以做一個類似的 對於3次方的事情。
但現在只更改範圍。
對於1啞變量 通過3，乘3次，
做同樣的事情。
>> 因此，這可能會覺得有點做作。
但是，還有一個重要的 這裡的東西
是看著這些 兩種功能，有
只有一件事是不同的， 這是在範圍此值。
一切有關這兩個 功能的3次方和2的冪，
是，其實是因為相同的 它們以同樣的方式工作。
>> 所以在這一點上，一個小 警鐘應該去了。
希望你在說什麼， 要知道，這種感覺有點
喜歡重複勞動。
也許有一種方法，我會 能夠封裝所有的這
並提供一個功能 或者創建一個函數，
不正是我想要不 需要給它明確地打字了。
這是什麼力量 一個封閉的讓我們做。
因此，讓我們來看看這個。
我會花幾個 分鐘在此，因為這
對於斯威夫特非常重要的。
我們看到這一切的時候。
我們要定義一個函數。
這將被稱為powerOf。
這將接受 參數調用類型為int年。
但看一看的返回類型。
返回類型是，在 括號，雙箭頭雙。
這意味著這種功能， 這個功能powerOf，
正在恢復的功能。
這是接受雙 並返回一個雙。
所以這聽起來瘋狂的那種， 但讓​​我們向下滾動一點點
看看，看看會發生什麼。
我們這個功能powerOf內。
我們正在創造一個新的功能 所謂的求冪，
但不要緊它是什麼。
>> 請注意，這有 x的輸入值。
而且它正在一個雙 並返回一個雙。
這是相同的代碼，我們 看了上面的，不同的是2的值
的3或值，即 上限在該範圍內，
已被替換 此值y，該
為初始參數 我們powerOf功能。
並在這一點上，我們 返回求冪。
我們返回的功能。
>> 這有點像一個小令人興奮。
但讓​​我們想像一下 當我調用這個函數powerOf
並傳遞到它的一些價值如2。
這意味著的是， 現在，我的價值
2 y的，這意味著，這個值 y在這個求冪函數
的值將是2。
但是我回到這個 求冪函數。
>> 所以注意什麼斯威夫特說我 在這種情況下，已經創建。
讓廣場上的定義，它是 可以接受雙擊功能
並返回一個double。
我創建了一個功能 該廣場的東西
使用這種機制就在這裡。
而真正發生的事情是 它返回該功能
求冪，但這個值 Ÿ被包裹在它的內部。
所以現在每次我用這個 變量或常量這個叫
廣場，這是怎麼回事 表現為一個函數。
所以我可以調用這個變量 就像我會調用一個函數，
並傳遞到它的一些， 像在這種情況下，3。
我會再平方此值。
因此，3平方然後將 成為9，因為我們可以在這裡看到。
>> 但現在真的瘋了， 讓我有機會
創建其他powerOf功能。
就像我可以說，好，現在我想 創建一個新的功能，powerOf（3），
並存儲到一個 常稱為多維數據集。
現在，多維數據集將是一個 獨立的功能，將隨後
需要一定的值作為輸入和多維數據集 價值，我們可以在底線見
這裡。
2立方體將會導致8。
>> 希望整齊漂亮的東西。
你以前從來沒有見過這個。
我鼓勵你尋找到關閉 並調查這多一點點。
它真正強大的東西，我們看到了很多 在JavaScript和其他語言。
這是真正重要的 理解的API以及
我們會得到，在短短一秒鐘。
是？
>> 聽眾：當你做 powerOf（2）中，括號，然後
另一個括號，另一個input-- 你基本上取代了廣場。
DAN AMRMENDARIZ：所以看 在這裡的最後一行。
它實際上是完全可能的 做鏈接如你所說。
所以powerOf（5）意味著我們要去 以具有5的求冪在這裡。
因此，這基本上將是 同樣的事情，4到第五電源，
因為我們已經創建了一個指數 傳播到第五功率，
我們正在傳遞到 該功能的值4。
而我們得到的價值 我們預計，1024。
聽眾：它不是一個 名字，所以它可以更容易
閱讀，廣場等等。
>> DAN AMRMENDARIZ：對，沒錯。
所以，之前我只是把它 為恆定在這裡，所以
它可以輕鬆使用該名稱。
是？
>> 聽眾：在這方面 powerOf，它的一部分
編程語言的 相對於這樣你
想powerOf在[聽不清]？
DAN AMRMENDARIZ：所以 在這種情況下，powerOf
是的簡單的名稱 我這裡定義了功能。
因此，它不是與生俱來 語言本身，
但相反，它只是 一個函數具有
這個名字是因為我給它的名字。
其他問題嗎？
好吧。
>> 現在，這是偉大的。
但你不會看到一個 很多倒閉的功能，
都是這樣的，你定義，裡面 的一個功能，另一個函數。
你可以做到這一點。
但它是一種不 真的有必要，對不對？
就像為什麼我定義這個 函數調用求冪
然後立即返回。
為什麼我不能只是馬上 回到這個功能嗎？
>> 而事實上，這正是 背後一個概念的想法稱為
匿名函數，其中， 匿名函數實際上並不
有，因為它們的名稱 不需要有一個。
因此在這種情況下，在圖7B中， 我們可以發現正是。
這一切都相同的代碼， 不完全一樣的東西，
但現在我們已經稍微改變它， 這powerOf函數立即
返回一個函數。
請注意，回國後， 有一個開放的大括號。
該公司預計，該輸入雙。
該公司預計，該輸出雙。
然後在關鍵字 分離代碼本身。
所以這是一個匿名函數。
它實際上並沒有一個名字，而 它被稱為求冪之前。
但正如我們所看到的，只是真的 沒有提及求冪
外面的功能。
因此，這並不重要。
所以，這個匿名函數 所謂的，因為它是無名的，
但它仍然被使用 本規範的範圍內。
>> 在接下來的那些我 要繼續希望
吹你的心一點點。
我們可以簡化此，甚至更多。
因為因為是敏銳 早前指出，
也許我們其實都知道，由 從這個代碼推斷，是什麼
這段代碼的輸出將是。
而事實上，在此匿名函數， 我們可以在推斷出實際上的數據的類型。
>> 所以在這一塊，我們不再 需要明確定義
數據的真實存在的類型 輸入和輸出從該函數
一對夫婦的原因。
一個是我們定義，最多的 原型的封閉功能，
什麼類型的數據這個匿名的 功能應的輸入和輸出。
而從另一方面，我們 可從代碼推斷
到這裡，我們正在接受 輸入，類型為雙
並返回一個雙。
>> 請注意，在這裡我們還沒有明確的 定義的參數名稱
這個函數接受。
因此，我們看到，我們可以參考一下 使用$ 0，$ 1所參數，
等等，等等，這取決於 使用的參數的數目
在此功能。
>> 這一點，你會 看到很多是這樣的開放式大括號
定義後跟 $ 0，然後一些操作，
然後封閉大括號。
這是一個匿名函數 執行此操作。
它有這個參數在哪裡 它的類型推斷。
這第一個參數為$ 0
而一些操作 發生在那個$ 0
>> 聽眾：所以，美元符號 是指基本的參數，
，0表示第一個？
DAN Armendariz環：這是正確的。
因此，美元符號的基本意思 參數，和0表示的第一個。
但是，它的工作原理特別是在 這種情況下，我還沒有命名
在我的匿名函數的參數。
>> 聽眾：請問Perl或一些有 這個美元符號，美元0在那裡呢？
DAN Armendariz環：這呢，我很抱歉？
聽眾：請問Perl的有 這種0美元，美元1--
DAN Armendariz環：我不是 太熟悉了Perl中，
但是PHP什麼定義變量 基於美元的跡象。
而且可能有一些語言 具有這樣的功能。
事實上，斯威夫特借用一個 很多這樣的功能
從很多其他語言。
我們看到它的Python提示。
型的這種定義 似乎來自OCaml的。
而我們剛才一大堆 東西從各種不同的語言。
這就是很好的一個 關於斯威夫特的事情
是，它需要大量的最好 從一堆語言的想法
和它們鞋拔一起 成一個超級語言。
事實上，如果你讓我 繼續吹你的頭腦，
所以我們一直在做這一切。
我們也許可以簡化一點 通過實現那當然位，
斯威夫特有一個指數 功能內置的。
如果我輸入達爾文，這 只是庫
擁有這種功能稱為戰俘，現 我能簡化我的功能功率
要如下。
它是將要返回 該匿名函數。
>> 但是看看多麼簡單，這是現在。
這是一個匿名函數 正在接受某些類型的數據，
它是要為一個 論點明確，
為$ 0表示是Double類型的引用。
它會返回一個類型雙。
但return語句 現在是隱含的。
>> 而正是這種精確的風格， 非常，斯威夫特非常普遍，
到處都是。
我們要看到這 所有的時間在斯威夫特。
所以，我展示這一切要 你是因為這個語法。
這是很常見 看，這意味著它
是一個匿名函數 正在執行
對這些參數的一些操作。
還有一個隱含的回報。
所以它絕對是一回事 我們這樣說，就在這裡。
>> 由於這種花 支架是一個功能，
我們執行此操作 第一個參數。
我們將返回。
但這種外部回報 在返回的整體功能，
這整個匿名函數 我們剛剛創建的。
其他問題嗎？
好吧，我不知道 你們是為此做好準備，
但我們還可以走的瘋狂與斯威夫特。
你準備好了嗎？
OK，這是偉大的。
>> 現在，我們實際上有能力 要在斯威夫特，因為如何模塊化
以及如何基於協議是，以 定義我們自己再用運營商。
像在這種情況下，我們沒有 運營商exponentiation--好，
用於執行一些權力。
但我可以在斯威夫特，定義一個新的 運營商，做正是。
因此，在這種情況下，有 一堆語法在這裡。
我會允許你看它 在家的時候，你看這個。
但是，我們定義這個綴 操作者，**，將允許我們，
通過定義是什麼 功能**實際
確實，以接受一個左手 側和右手側，
然後，返回的，該指數 左手側到右手側。
>> 所以，現在突然我的 已經創建了一個新的分子。
所以2 ** 3裝置2的3次冪。
[令人興奮的聲音]本所 本身應該讓你像，
OK，螺絲C.我要去 雨燕一路。
這很棒。
這是非常奇妙的。
>> 雖然這是一個很好的例子。
但我從來沒有一次外 本實施例的實際
定義自己的操作符。
但儘管如此，它顯示了 很多雨燕的動力
為什麼這實際上是 真的非常酷。
好了，是嗎？
聽眾：如果你是 定義你自己的運營商，
你怎麼知道你不小心 嘗試創建一個操作符是
在某處C，像 在斯威夫特的地方隱藏起來，
就像一個不起眼的一個，你 可能以前沒看過。
>> DAN Armendariz環：所以，如果你想 定義你自己的操作，
有限定的危險 一個比現有的運營商。
這將詳細的水平 我不認為我們有時間去了。
但是，這是一個危險。
而這實際上是非常的原因 我沒有使用插入符號符號，這
當我們輸入了動力，我們通常 用4個小尖號5或東西
這樣，就在我們 Gchatting哥們或什麼的。
但在這種情況下，實際 會造成衝突。
所以我避免它只是因為 我碰巧知道在這種情況下，
，這將導致該衝突。
>> 好吧。
現在不幸的是， 最後7分鐘
我必須繼續吹 你的心一點點。
所以，請允許我向您展示 一些其他的事情也是如此。
>> 我們已經展示了這個想法 具有這些匿名函數，
這些蓋子，讓您 那種傳遞函數左右。
你可以歸還。
你可以操縱它們。
你可以做各種瘋狂的事情。
>> 但有其他的事情， 恰好是有用
被的能力，而不是 久違這些功能
在一個函數，傳遞函數 作為參數傳遞給另一個功能。
你可能會在地球上的思維以及為什麼 我希望做這樣的事情？
>> 好吧，讓我們說，我想 藉此運營商，我
辛辛苦苦創建和應用 它以一串不同數量的
在數組中。
因此，在這種情況下，我有一個數組 integers-- 1,4，7,2，5，10，56。
而且我要加倍他們。
的方式，我們將一般 做到這一點是只寫
for循環的簡單的 遍歷所有的人
並執行某種 方操作過他們，
輸入這些新值到一個新的 可變的，或者說，在這裡一個新的數組。
和的輸出的值 結果是那麼所有這些陣列，
或者更確切地說，所有這些 元素現在平方。
>> 我們可以做同樣的 對多維數據這東西，
但有點警鐘 應該將關閉
說，也許有 某種程度上，我們將
可以這樣簡化一點。
而事實上是有的。
如果我們能夠創建什麼 一個可以讓我們
接受，作為一種食肉動物，一個功能？
所以在這種情況下，採取一 看看這些參數。
我們將接受雙打的名單。
然後我們要去 接受功能
在一個所謂的F這個變量是怎麼回事 採取雙，並返回一個雙。
而整個輸出 這整個功能
稱為映射器將會 回到所謂的雙陣列。
>> 這是什麼會，然後讓我 做的是遍歷該列表
做同樣的事情，但現在 應用該功能在每個
在該列表中的各個值。
所以，我真的不知道什麼f是。
不要緊，對我來說。
但是，只要它需要在一個雙， 它執行一些操作，
然後返回一個 雙，我將被
能夠映射功能跨越 列表中的每一個元素。
>> 而這種類型的節目是 所謂高階函數，
在這裡我們傳遞功能 周圍的參數
和做事情的功能。
這有點像把所有的這些 我們在CS50所學的想法
並考慮他們排序 的下一級。
而這一切都是CS51風格的東西。
因此，我們會去深入 更多的類這樣的。
>> 但是這也是 這裡很重要，因為我們
看到很多功能 這是在斯威夫特使用
基本上不 這一點，我們有
一些數字，數字的一些陣列。
我們將傳遞 數組轉換成我們的映射器。
而我們也將 通過一些函數，它
我們已經確定在這裡。
這將是正方形。
而我們要那麼 方所有這些數字
並存儲到這個結果在這裡。
>> 所以，這種情況下，我們已經定義了我們 自己的函數調用映射。
但這個確切的事情是， 事實上，內置斯威夫特。
有各種各樣的 函數調用的地圖。
有一個地圖功能， 有一個減少功能，
並有一個過濾功能， 這基本上是應用功能
在一個每一個元件 列表來修改它們以某種方式。
>> 聽眾：所以因為你正在改變 將數據轉換成另一種格式
通過function--
DAN Armendariz環：對。
是啊，這樣的功能 我們正在接受
正在改變以某種方式的數據。
在這種情況下，我們要么 現蕾，或者我們多維數據吧，
還是真的，我們可以執行 它沒有任何操作的。
>> 但讓​​我告訴你再如何 是要看看在實踐中。
再次，我快 時間位。所以我不
要能夠走在所有 這裡詳細的源代碼。
但我鼓勵你這樣做。
我們會盡快將它張貼 可能在這之後的談話。
>> 但是，如果你看看這個， 假設我們有號碼列表，
號在此的數組 變量被叫號碼。
然後，我們要執行這個 這些數字過濾操作。
因此，過濾器是一個較高 為了功能
接受一個數組，並且也是功能。
而在每一個元素 陣列，它執行該功能。
>> 如果該函數返回 真的，它使該項目。
如果該函數返回false， 它丟棄該項目。
然後它返回一個列表 隨後被由所有
的那些已被過濾的項目。
>> 因此在另一個話，這是 同樣的想法，在成績冊。
我們可能有各種檔次 這個值被叫號碼。
可以是100和70，和 40，等等，等等。
這是什麼做過濾的通知 這是語法糖
一個匿名函數。
這是一個匿名函數說 這是我接受的參數
將是，如果它 大於70，
那麼這將返回true，這意味著 該項目將被保存在這個過濾器。
因此，讓我們一點點 這個更具體。
如果我有一個數字數組 它包括100，70和40，
我執行這個過濾器 操作這些中的每一個。
使第一個是100這個值。
100大於或等於 70是真的，這
意味著100被保持在 該數組的新副本。
70也通過。
但40沒有。
那麼在passingCount返回 是元件100和陣列70--
100，逗號，70。
這些是僅有的兩個 被保留的項目。
這樣一來，我之所以很快就通過 很多這類高階的
事情是因為這是普通 您將在斯威夫特看到漂亮的東西
頻繁，正在進行操作 使用該匿名函數的語法。
>> 這裡也有一些很酷的東西。
交換機是在斯威夫特果然厲害， 我的意思是，就像瘋了，瘋強大。
你可以使用交換機， 實際上你可以應用它們
到的範圍，這是那種瘋狂， 做花哨的東西一樣。
>> 但在最後幾分鐘， 我想跳過前面很遠
並告訴你如何具體例子 我們可以在iOS應用使用SWIFT創建。
所以，當你在做 這一點，你必須採取
一看at--蘋果的 文檔，它們
有很多真正好的教程 創建第一個應用程序。
我鼓勵你做 是因為他們帶你
通過精確地所有步驟的什麼 點擊創建iOS應用程序。
>> 但在這裡，我們有這個iOS應用程序。
而這是一個非常簡單的應用程序真的。
如果我運行這個，讓我告訴 你是什​​麼樣子。
所有這本質上確實是它 從互聯網的JSON文件拉
我已經存儲在服務器上。
這JSON文件 定義圖像，使
我再通過，週期在我 應用程序，從我的web服務器映像。
>> 所以，我這裡有getNextImage。
它加載圖像從互聯網上， 然後在屏幕上顯示出來。
>> 所以這是非常簡單的。
但這裡的目的是展示 你如何才能結合起來的東西
從後者幾週CS50的 成實際的iPhone應用程序。
換句話說，或許中的一個 的事情，你會想要做
是有一個iOS的應用程序 可以從互聯網提取數據
和顯示用戶的某些信息。
這完全是點 這裡這個源代碼。
>> 因此，有很多可說的對 如何做實際的iOS開發。
有很多瘋狂的語法 我們還沒有看到相當，但
像類，一類實際上是什麼。
我們可以在很大程度上忽略 該暫時。
>> 但是請注意，我們已經包含 在這各種各樣的事情
我們已經看到像 具有特定名稱的函數。
而當我們給那些 功能正確的名稱
這是由iOS的預期，事實上 這種感覺有點不可思議。
當你創建一個，但 iOS的應用程序，有
具體函數名 由手機本身被稱為
作為應用程序加載嘗試 實際創造的過程
運行你的應用程序。
如此反复，有很多的事情，我 有掩飾這裡，以便我們
談論這個特別。
但我建議你看一下也許 在其他iOS研討會上，但也有一些
該在線教程裡面做的 描述一個更好的工作
的特定信息。
>> 但是，我們可以看到一對夫婦的事情， 從這裡代碼有意思。
請注意，我們有if語句。
順便說，一個重要 有關if語句的事
是周圍的括號 布爾表達式是可選的。
不過，花括號是不可選的， 無論多麼少或者多行代碼
你有一個if語句。
你不能有一個if語句 無斯威夫特花括號。
>> 這是很好，有點傻。
但有歷史原因的。
它應該拯救你自己。
像這樣的例子，你不能 消除圍繞著大括號
if語句。
這些其實都是必需的。
所以，我鼓勵你 看看這個。
但是有一個更 構造，我想
向您提供迅捷的 是新雨燕2.0​​對比
舊版本的雨燕， 這是下面的內容。
讓我們看看在哪裡我把它放在這兒？
>> 因此，在這個函數中調用 fetchJSON，該功能
負責拉的JSON 從URL，這恰好文件
要運行在我的CS50的IDE。
我剛開始的Apache， 把我的JSON文件存在，
而我能夠再扳指 使用來自互聯網的數據
這個功能和這個URL， 這是由電話提供的。
它由一個提供 庫您使用時
你正在做一些iOS應用程序的開發。
>> 請注意這裡是有這個不尋常 語法結構被稱為後衛。
而真正的這一切都是在 雨燕是驗證的一種方式
有些事情有 在你得到滿足
繼續執行功能的其餘部分。
所以我可以有，使用 這個可選的類型，
我能找到的網址 運行此NSURL功能
並存儲該到一個URL 恆定，然後檢查
看是否URL為零，因為它 正想返回一個可選的類型。
如果它是零，那麼我會 打印出一個錯誤，然後返回。
>> 但是，相反，什麼後衛讓 我們做的是非常的事，
但確保其 實際的情況是URL
已正確由NSURL設置。
並且如果是的話，它 跳過這一點，它
可以讓你繼續 網址已被正確定義。
但如果是的情況下 URL不是正確定義，
如果這個函數返回一個錯誤 或其他一些意想不到的事
實際發生，該保護結構 讓我們再輸出錯誤
並立即返回。
是？
>> 聽眾：所以這是一種 像一個，如果再別的嗎？
DAN Armendariz環：這是一種 就像如果當時別人，是的，
但此URL隨後 定義低於這個一切。
如果通過這種控衛的話， 實際上將填充數據
並在剩餘的可使用 在你的函數的源代碼。
因此，我懷疑你會 開始看到這個後衛也是如此。
同時也要注意這一點。
>> 所以只要看幾個其他的 的事情，在這裡這個權利是什麼，
你覺得，只是基於什麼 我們之前在談論什麼？
>> 聽眾：認為它會在列表中運行？
>> DAN Armendariz環：所以很接近。
這是一個我們所定義的功能。
我們正在輸入的功能 作為參數傳遞給這個函數在這裡。
>> 聽眾：[聽不清]如果不是零。
因此，它在列表中，對不對？
>> DAN Armendariz環：如果錯誤不是零， 讓is--，所以我必須滾動。
好吧，讓我們來看看，我真的不能 滾動到這裡的權利。
誤差是正被一個參數 傳遞給這個匿名函數。
這是一個匿名函數。
它沒有名字。
但是，我們接受這三個 參數，數據，響應和錯誤。
它是要返回void，所以 它不會返回任何東西。
這是內容 的該功能。
然後我們有內部的訪問 功能到每個這些參數。
>> 所以這是一個旋風 巡演的語言。
但我希望這一點， 你把希望
看看一些教程 具體到iOS開發與斯威夫特，
特別是如果你去 蘋果的開發者網站page--
他們有很多真正的好 讓你開始教程。
但希望只是這一小時的談話 關於語法本身已經給
你有足夠的開始使用了。
>> 我們將發布所有這些源 研討會上網站代碼
盡快，並且還幻燈片 所以你必須對所有這些參考。
不過，好運與您的項目。
並感謝大家的光臨。
>> [掌聲]