>> DANIEL Armendariz環：大家好， 歡迎到iOS應用程序開發
與迅速。
我是丹Armendariz環。
我的電腦precepter 科學在這裡的學校
工程與應用科學。
和迅速實際上是一種 一個真正整潔的語言。
我有一些計劃今天。
所以，在接下來的一個小時左右，我們要去 來看看iOS應用開發本身
使用Xcode中，實際上創造一些 很基本，很簡單的應用程序。
看著路上，你 居然拿這些應用程序，
並建立他們，實際上 把他們的iOS設備上。
有些事情， 我們不會看
將包括像 實際上正在申請
並把它放在應用程序商店。
有很多教程網上說 將幫助你以它這方面。
而且還因為作為 CS50的一部分，你會得到
加入蘋果開發 團隊，CS50的應用程序開發團隊。
如果你還沒有做到這一點還沒有和 您結盟CS50，
我建議您 這樣做，因為這
是你如何是能夠創建 有些程序在Xcode，
打造他們，居然把 他們對你的一些iOS設備
如果你確實有 物理的iOS設備。
如果你沒有一個物理的iOS 設備不僅僅是罰款。
實際上，你可以開發針對iOS。
和Xcode中有一個 模擬器，可以讓你
看到你的應用程序 您的計算機上的操作。
排序，但它是一個整潔的事情 實際播放和互動
與應用程序 上的實際設備。
因此，有一對夫婦的要求， 真正做到這一切的發展。
其中之一是該 你必須有一台Mac。
它必須運行10.9.4或更高 為了做到發​​展與迅速。
>> 您可以使用較早 版本開發
與iOS和Mac的目標C。
但我建議，很多的 舉例說，我們會看到今天，
使用10.10優勝美地。
所以，如果你還沒有升級， 這是一個很好的藉口這樣做。
現在的Xcode 6.1是最新版本的 集成開發環境
蘋果提供了免費的 您可以下載過的應用程序商店。
我建議您 還運行的最新版本。
>> 如果你碰巧運行較早 版本的Xcode 5只以下
根本不支持任何迅速。
而公測版本6個，其中 被釋放在今年夏天，
做支持迅速，但有 是一個巨大的數字
變化的語言的，足以 所以，你是代碼
去看看和你 可能會發現在互聯網上
實際上不會正確編譯 在Xcode這些以前的版本。
如此反复，如果你還沒有 有一個開發者賬戶，
我建議你去 developer.apple.com。
註冊，創建一個開發者賬戶， 並加入了CS50的應用程序開發團隊。
這將提供給你一個機會 編譯應用程序
並把他們的設備上。
好了，讓我們開始吧。
的第一件事 我們要做的是
實際創建一個非常 在Xcode簡單的項目
這將允許你 提出申請。
>> 所以，如果你還沒有的Xcode 開放，繼續前進，打開它
並創建一個新的項目。
一個特殊的啟動畫面 將打開，會給你
關於什麼的一些選項 這是你想做的事情。
只要說你想要創建 一個新的項目，新的應用程序。
該窗口會彈出， 假設你使用的Xcode 6.1。
現在，並為 本次研討會的持續時間，
我們將使用 單一視圖的應用程序，只需
排序的基本應用 讓你的腳弄濕。
你可以另闢蹊徑 從那裡你自己。
>> 點擊下一步，在這一點上。
現在，這裡有幾件事情 你可能想進入。
該產品的名稱是 項目的名稱。
在這種情況下，我只是 要叫它Seminar1
因為這是我們的第一個例子。
組織名稱，在 這種情況下，僅僅是我的名字。
你當然可以改變它 以你自己的名字，或者CS50。
組織標識符，如果你 碰巧有一個網站，只取
在域名 反向，com.yourname。
該產品然後將名稱 會自動出現
之後，隨著包標識符。
>> 顯然，我們是語言 將要使用的今天迅速。
當然，你可以使用目標C 對於這一點，但今天將是迅速的。
我們將現在說 萬向設備，所以
它可以同時在iPad和iPhone。
我們將離開核心 數據選中保持
該項目相對 簡單的暫時。
因此，讓我們繼續前進，然後單擊下一步。
而且它會問我 在這裡我要保存它。
我只是將它保存到我的桌面了。
>> 好了，所以現在這是什麼將 發生在你真正開放的Xcode。
並注意 你看到的第一件事
這是感嘆號的 說沒有找到簽約的身份。
我故意這樣做 在我的電腦，我
希望我要去 能夠真正解決這個問題，
因為我想讓你看看這個 實際上在自己的機器工作。
>> 來吧，點擊修復問題。
它會問你，如果你有一個 現有的蘋果開發者賬號。
這是在加入 CS50的應用程序開發團隊
很重要，這樣你不會 只有一個應用程序的帳戶，
但你也有 能力簽署的應用程序
並把他們的iOS設備上。
這是不是 - 點擊 修復的問題是沒有必要的
如果你只是要 建立和發展本地，
完全在了iOS模擬器。
>> 但現在我要去 制定並把它們
在我的iPad上，這將是 能夠播放為好。
所以，我想實際添加此。
而且它會問 我要我的Apple ID。
因此，這將是這一點。
我要去找我 密碼，這是在這裡。
所以給我一秒地發現， 和複製，並粘貼在這裡結束了。
>> 單擊添加。
它會問我 哪支球隊，我想加入。
我會做工程的學校。
點擊加入。
哎呀，那是錯誤的。
讓我們做這一塊。
希望這一個生效。
一個仍然不能正常工作。
我們正在運行的好的位置。
OK，這個應該工作。
現在關閉了。
現在，讓我們做學校 工程，單擊選擇。
>> 現在希望經過 幾秒鐘內，你can-- OK，
我會撤銷，並要求。
噢，伙計，這將無法正常工作。
OK，我會嘗試不同的。
讓我們在這裡做這件事。
現場演示失敗了我。
我們可能要恢復到剛 建設完全在本地，
但是這將是在這種情況下確定。
>> 所以在這裡，而這實際上是 工作中，我們要做的只是
創建一個非常簡單的 Hello World應用程序。
所以這是Xcode的。
如果你還沒有看到它，它 可以是一個有點嚇人在第一。
有很多窗格，有一個 很多在各個領域的裝飾物。
但是，僅僅認識到有 真的幾種主要成分
這一開發環境。
最左邊是所有的文件 這適用於你的程序
或您的特定項目。
我們將圍繞點擊 對他們中的一些，我們將
指出最 重要的一段時間。
最右邊，我們 有一組屬性。
而所有這些屬性中，有 各種窗格的屬性。
窗格會根據變化 的主要內容的範圍內，這
恰好是在中間。
現在，中間可以實際顯示 你各種各樣的事情，例如
你的代碼本身。
或者你可能實際上have--時 你點擊其中的故事板
是，通過該方式，僅僅一個圖形 您的用戶的代表性
接口為您application-- 那麼屬性窗格
在很遠的權利 實際上將發生改變。
現在有幾個其他的 的事情，我想指出。
排序，你可以探索周圍 在自己的環境中。
不過的事情之一 這是非常有益的
是這個按鈕這裡，該 窗口的右上角。
有此按鈕 看起來像遠
離開它有一個段 其次是兩個圓圈和排序
兩個箭頭指向 彼此遠離。
如果你們之間的切換 標準的編輯器，
是最左邊之一，所述一個 這是默認選擇，
而兩個圓重疊 對方，你實際上得到了什麼
是一個雙窗格視圖。
>> 這實際上是 將是對我們有用
當我們需要鏈接項目 在UI的代碼。
我們將更多地討論 在短短的時刻。
但要意識到，如果你得到 更窗格這樣，
你可以簡化您的看法 通過單擊後退一點點
你單編輯器。
到目前為止，一切都很好。
所以基本上，我們對代碼 左，屬性在右側，
而無論它是我們正在努力 在這裡的中心。
>> 所以在這裡，我點擊 在主要故事情節。
和故事板， 再次，是在Xcode的方式
你其實可以創建用戶 只使用拖放界面
技術。
所以我們非常 第一個應用該
正是我們要做的。
我們要深入到 很遠右下部
在屏幕上，它包含了 各種用戶的元素
然後你可以點擊並拖動 創建用戶界面。
>> 現在，所有這些 元素被稱為意見
因為他們提供某種觀點。
有一個圖像視圖，用於 例如，為了實際顯示
在用戶界面上的圖像。
有一個表視圖 實際顯示的表。
等等等等。
有各種各樣的 意見，你可以在這裡選擇。
所以，只是現在我們要去 要搜索的一個標籤。
你可以滾動 所有在那裡的名單。
但有搜索 酒吧在最底層
這使得它更容易識別 具體意見，你實際上
要拖動到你的用戶界面。
>> 發現我的標籤。
我要在這裡拖，直接 到我的示例應用程序。
正確的，在中間看起來不錯。
而且我要輸入的“Hello World！”
按Enter鍵。
現在我有一個標籤。
它看起來並不像它的 很恰當中心。
這樣我就可以嘗試重新中心吧。
幸運的是它提供了這些 引導，使事情變得更加容易。
我要去嘗試編譯它。
希望這實際上會在這裡工作。
如果不是這樣，在短短的一瞬間 它會在事實上出現在我的iPad。
就是這裡。
它就在那裡。
>> OK，所以就是這樣。
我們就大功告成了。
我們已經創建了很 首次應用。
現在很明顯，這並不做任何事情。
這只是一個標籤。
有沒有關係 用戶界面和代碼。
因此，如果我們真正想要的 創建這種連接，
如果我們真的希望有某種 元件之間的通信的
對存在 屏幕和代碼
使我們能夠控制 這些元素，則
我們確實需要 看看代碼本身。
>> 所以，這就是被稱為 ViewController.swift。
以及用於，特別是用於 你的第幾個節目，
這將是排序的 散裝您enter--的代碼
將是本文檔中在這裡。
有很多東西 這是在這裡，到目前為止，對不對？
有進口UI套件類，重寫， [？臨陣脫逃，？]所有這些不同的東西。
它不是很清楚什麼 這是這一切的意思。
因此，讓我們退後一步走 從Xcode中一點點
並期待在語言本身，快捷。
>> 因此，與迅速，它是在 設計和開發
在蘋果公司約四 幾年來我的理解。
並有幾個特點 它是很整潔。
首先，它的編譯 語言，就像C.
所以，你首先要 編譯，然後運行它
之前，你實際上可以 執行該結果的代碼。
但，不像C，一個互動 提示，你可以實際運行
並鍵入任意命令到。
而且很像一個JavaScript控制台， 你可能很熟悉了，
它實際上會評估這些 命令和提供給您的輸出。
而且他們甚至採取了 該下一級
他們已經創造了什麼 在Xcode叫遊樂場
允許您 與視覺上的代碼工作。
我們將真正看到一些例子 那在只是一點點。
它是基於C.çunderlies 它，因為所有的編譯器
創建代碼出C和 創建該對象的代碼。
但它確實股份 相對較小的語法。
它看起來相當不同。
就會有一些相似之處。
但也有將要 不少分歧
相比較，比如說，JavaScript的或PHP。
我們將這些點 在短短的時刻。
>> 現在，人們的最大的事情 關於SWIFT這很好
是，尤其是相 以C，它的意思是安全的。
在它的一切是為了 要非常強類型英寸
事實上，它幾乎是煩人 首先，當你第一次
開始迅速工作，就如何 很多它強制類型無處不在。
任何一個字符串 必須保持的字符串。
這是非常難以理清的轉換 它或者強制其一些其他形式。
>> 再次，我們將展示這方面的例子。
但最終認識到， 這是為了保護你，
並通過你，我的意思是你的代碼，從 崩潰在某些可怕的方式時，
你有一些不匹配的類型。
再次，努力吧。
因為這將是令人沮喪的第一 當你試圖找出到底為什麼
你得到這個不尋常 錯誤處理類型。
不過，這將是值得它到底。
>> 它不處理自動 內存管理，
所以不再做你 要處理的事情
就像malloc和free和所有 這些各種各樣的事情。
而且它的設計也為泛泛而談。
因此，儘管我們可以用Xcode中來 創建iOS應用程序和Mac應用程序，
我們也可以只使用它 作為腳本語言。
因此，我們可以用它排序 代替PHP或代替
Python中的實際 快速分析和處理
一些數據，我們有我們的計算機上。
>> 它具有多種現代 特點，自選，可變性，
泛型，關閉，和很多這個 東西你可能會或可能無法識別。
和它的排序只是一個不幸的 該語言的一部分，其中一些
樣的未來，現代元素 被包含在所述元素是
這樣根深蒂固的，我居然會 有教你CS50.5一點點。
>> 我們必須學習多一點 一些功能，以便
要真正了解這是怎麼回事 上，這樣你可以看看代碼
並沒有感到完全喪失。
你就會明白我的意思 由在短短的一分鐘。
OK，所以let's--夠本 那種理論的東西。
讓我們來實際看看我們 最初的迅速程序。
它的一行代碼。
14號線就在這裡，它 說打印L N打招呼CS50。
>> 因此，有幾件事情那 這個對比非常不同
的事情，你可能會 從C用於，例如。
其中之一是，有沒有 intmain，沒有包括部分，
有沒有這額外的東西。
在包括像標準 的I / O，如庫
實際提供的 語言的標準功能，
被自動納入 SWIFT的標準庫的一部分
並自動導入。
你不必做 手動的進口。
>> Intmain不存在的，因為 主入口點代碼
實際上是在 開頭的代碼。
讓你有任何代碼 從頭開始
實際上將在開始執行。
所以這真的是大大簡化了。
通知還，有沒有分號。
有這種語言沒有分號。
你把聲明 上的單個線
然後下一行 代表其他聲明。
如果你想要把 網上多發性陳述，
那麼你必須用分號分隔它。
但在大多數情況下， 良好的作風，我們
永遠不會看到分號的 分離報表的目的，
在快捷。
那麼，這怎樣的實際工作？
以及非常像C我們 實際上編譯這個。
因此，我們可以做到這一點通過使用 迅速c和再1.swift。
再經過一對夫婦 分鐘，這將編譯
然後我可以運行的項目之一。
而比它只會說“你好CS50。”
真棒，所以我們走。
還有我們的第一個Hello World程序。
讓我們繼續前進到第二位。
>> 現在在this--這種情況已經改變 咯，因為正常而你
do--其實總是你有來 編譯，然後迅速的應用
實際運行它 - 1 的強大功能
我之前提到的是， SWIFT實際上可以在排序中使用
的偽解釋方式，存在 其實像一個解釋。
但是，這將做的是有 是的，其實，迅速應用
你可以運行。
>> 因此，例如，如果你只需要輸入 迅速在這裡，會發生什麼
是，你會得到一個提示。
你可以輸入你的SWIFT 碼，打印打招呼，並運行它。
它實際上將print-- 同時，它並沒有在這種情況下，打印
因為它打印到中心 出來，這是不可見這裡。
但它實際上是能夠發揮作用。
所以在這種情況下，我只是 將使用這個作為一個腳本。
我可以實際運行這段代碼出現。
所以，我實際運行的方式 它會略有不同，
但你會看到，在短短的時刻。
現在，在這種情況下，我們要去 做的是先定義一個變量。
所以這是我們如何定義 在一個迅速變化，
在我們使用let關鍵字，其次 由變量的名稱，
然後我們提供了一些 可選初始化數據。
所以，這種情況下，我們定義 一個叫名字不變，
我們打算使用，在 我們的印刷線的輸出
在最底層，你好名。
>> 現在可以看到，而不是用％s， 我們可以封裝這個名字
在/變量（），並能夠 串聯在這個內容
字符串這個字符串。
現在不像C，字符串是一個 實際真正的類型迅速。
所以它旁邊坐 整數和旁邊
很容易雙打 自然比較
的一些其它的 我們已經看到的語言。
因此，這實際上起作用 就像你所期望的。
>> 我可以運行2.swift。
而且我們看到，我的名字是 實際上拼接，“你好丹”。
OK，真棒。
移動到第三位。
現在是一點點 一個善意的謊言中，我
說，我們申報的方式 變量是使用let關鍵字。
因為你可能可以做很多次 想用讓，因為那是什麼呢
是它定義一個常數。
並告訴迅疾之能 優化您的應用程序的速度
因為它知道了 變量是不會改變的。
>> 所以仔細評估 當你要使用
為可變 目的改變它。
而當你要 只要創建一個變量
舉辦一些數據，這是 實際上並不打算改變。
所以永恆的概念， 它實際上並不打算改變，
是一個重要的甚至 遠了界定變量。
所以在這裡我們定義了一個名字， 讓名，在此情況下
這是一個常數，即類型 字符串，它等於丹。
>> 如此，而在現有 版本，它infers--和“它”
我的意思是swift--迅速 推斷的數據的類型
我們已經進入了變數。
在這種情況下，我們可以明確的。
因此，讓這則名 變量的名字，然後一個冒號。
和冒號後面我們做的 指定的數據的類型。
因此，不再是INT名稱或 字符串名稱或類似的東西。
而是讓標籤，我們 定義是否
它是恆定的或可變的， 其次是名稱，
接著由類型任選。
>> 因此，在這種情況下，我們定義 這個名字是一個字符串。
我們說的是丹。
現在我有另一個變量， 在這種情況下，它被稱為標籤。
但是請注意，這是 前面加上var關鍵字。
var關鍵字手段 這個變量可以
在稍後的點被改變 時間，在代碼中某處
我們能不能改變它，它 不會給我們任何特定的錯誤。
>> 我們可以做標準的串聯 運營商在這裡使用的加號
實際添加我們 命名為這個字符串。
然後我們就可以打印出 正如我們所看到剛才。
現在，讓我們說你 要創建一個變量
但你不想初始化它。
你還沒有想 把其中的任何數據。
那麼你要告訴 數據迅速什麼類型
將是之前你可以 其實正確的定義。
>> 因此，在這種情況下，當我們定義 一個變量稱為檔次，我們必須要
明確的關於它的類型，因為 它不能推斷只是尋找
在初始化數據 您提供給它。
它將給我們，如果你一個錯誤 剛型變種等級，例如，
因為它沒有類型因此。
所以，品位= 100。
使100是一個整數，它 適合非常漂亮成。
它將繼續發揮作用。
我們可以看到那我們 可以串聯這一點。
現在，你可能會 動心了，如果你真的
想串接 等級到另一個文本字符串，
到另一個字符串，你只想 使用該相同的串聯操作者。
而且，通常會是正確的。
但是，迅速將不允許 隱式修改的數據的類型。
因此，在這種情況下，該 線，25，將失敗
因為等級是 整數，而不是字符串。
所以有不匹配set of類型。
所以，你必須時要明確 要改變這種數據，
當你想強迫該 數據轉換成另一種類型
並說，OK，我要帶 這個檔次的，這是一個整數，
並將其轉換為一個字符串。
>> 所以我採取資本弦樂所有 類型，你會發現，有資本，
INT，雙，字符串，等等等等。
所有這些都是資本 只是為了讓事情變得更容易。
我們會說資本 字符串傳遞進去檔次。
它會創建一個 串出的整數。
然後我們可以連接 兩個非常漂亮。
對這個東西至今有任何疑問？
好吧，讓我們來犁 通過對排名第四。
>> 現在，讓我們來談談一些更高級 結構，像數組和循環。
不像C，陣列迅速 不是由指針表示。
在迅速的三分球， 儘管它們存在，稱為
像不安全的指針或 一些相似的類型是這樣，
他們沒有接觸到你正常。
所以就變得非常困難 為您操作
直接在您的計算機的內存中。
>> 這樣的陣列僅僅是數據類型。
而他們正在使用這種引用 現在標準的方括號
那你以前見過。
但是，當你真正想要 定義類型的變量的
由於一些陣列 特殊類型，那麼你
把這種類型的方括號中。
還等什麼，我想說的是， 我創建了一個名為變量
等級類型為int數組。
和我設置了等於一些 初始化的數據，在這種情況下
是100時，0，90，85，這僅僅是一個 收集任意等級這裡。
現在，在這種情況下，我可以， 請記住，刪除類型，
並且這將是能夠推斷它 基於所述初始化數據。
但是，如果我刪除這一點， 我需要以後設置，
那麼我將不得不確保 我有存在的類型。
好吧，讓我們沿著。
所以我們can--陣列 向我們提供了多種
通過這點符號方法 你可能現在熟悉了。
所以grades.count例如 告訴我們恰恰數量
那些元素 包含在此數組中。
>> 如果我想補充additional-- 現在發現，這是一個變種
而不是 - 這是一個變量 而不是一個常數，它
意味著我可以改變的內容 這陣，我可以添加對象吧。
但我不能只說成績 然後在方括號
4，因為這將是一個 出在這種情況下，邊界錯誤。
如果我想真正改變 此數組的大小，
我必須使用點追加方法 添加的東西到它的盡頭。
我可以，但是，變化 個人指標。
>> 所以，我可以用成績 然後括號
零操縱這首指數 等等，就像你通常會期望。
我可以做同樣的實際 接收來自該數據為好。
現在，這裡還有幾分看中方法 中這樣做，等級加等號
然後另一個索引， 這將append--
或者沒有其它index-- 但另一個名單，
將追加該列表 以牌號的背面。
和等級將 那麼包含了這一切。
但是，這是某種額外的東西 說我只是顯示你的樂趣。
>> 現在有一個for循環。
這就是，其中的起始 事情開始改變一點點。
請注意這個for循環 來自於C.循環不同
現在，我會注意到， 在斯威夫特循環可以
做出看起來像在C環，但 還有很多更實用構造
，基本上消除了 要對VAR i等於0分號我
小於一定長度， 等等等等，對不對？
並且該構建僅僅是其中之一。
>> 對於指數，指數新 可變的，在這種情況下，在範圍內。
而且我說的是，有 範圍從0一路攀升至
但不包括grades.count。
所以這點少點 比符號代表
從零開始的值的範圍 一路攀升至grades.count減1。
有一個單獨的 運營商存在，
這是點點點，這將 意思是，我想零的範圍
以等級計的包容性。
>> 但在這種情況下，因為這些 數組是零索引，我們當然
不想去的 等級的最大數量。
我總結了成績，你可能 預計，輸出這一切的東西。
OK，繼續前進。
現在，讓我們來談談功能。
為了定義函數 你用芬克關鍵字。
再次，在斯威夫特你必須 要非常小心的類型。
您提供給它的參數 通過定義，例如，
參數的名稱和 然後在科林，數據的類型
你期望 參數接受。
>> 所以在這種情況下，我們有一個 函數調用印刷級計數。
它接受一個名為成績冊的變量， 或者更確切地說，一個參數叫成績冊。
而我們期待的成績簿 是一個整數數組。
如果成績簿是空的， 我們將打印一件事。
否則，我們將打印出的號碼 的成績，這實際上有。
>> 現在，如果我們想返回 一些值，則方法
我們修改這個定義 實際使用此箭頭關鍵字，
或使用本箭頭指。
所以在這裡我們要定義 一個函數調用的平均水平。
我們要接受一個數字列表。
而且我們要返回 雙，這將有望
在這個數組的平均值。
並且為了做到這一點，為了 去實際計算該平均值，
我們將採取我們的總和，並 當然，總結所有的對象
這個數組中。
>> 請注意，有一個新的 風格的for循環在這裡。
我們不必是明確約 遍歷每一個元素，
但我們可以說的，而不是為 等級和成績冊，意義
對於每一個 項目，我們在這一點，
提供這該項目 變量稱為檔次。
我想用它做什麼。
所以我要來概括所有數據 實際上返回雙師。
>> 現在注意這裡再次出現了 概念斯威夫特整數除法。
如果你想雙師 因為你想小數，
那麼你必須要明確， 不只是一個側面，
因為它不會讓你 強迫在這兩邊的數據，
你必須真正當然 雙方進入雙打均
讓你很 明確關於確保
你做雙師。
>> 讓我們繼續前進。
所以，如果我真的想accept-- 所以在這個特定例子中，
這仍然是一個命令 行的應用程序。
我們已經開始看到一些 年輕的語言的局限性
中，雖然我們可以 通過訪問這些參數
這process.arguments，它的 仍未必最乾淨
我們見過的東西。
但基本上，我鼓勵你 要排序看這個代碼
和揣摩 究竟是怎麼回事。
>> 從本質上發生了什麼事是， 我們正在採取的參數列表
並強迫他們進入 整數，然後我們
將要使用，作為一種方式來打印 我們所有的等級的平均值。
前進。
現在有另一種類型的數據 - 另一種數據類型，而不是數組
稱為字典，這是非常 類似哈希表或哈希地圖
和類似也 PHP的關聯數組。
因此，他們有想法 的密鑰和值。
>> 而且他們還與定義 此方括號，
但不同的是 該字典有
裡面的方括號，冒號。
和結腸分離數據 鍵入是鍵和值。
因此，在這種情況下，我要創建 字典接受一些成績。
它將會是 字符串類型：INT，
這意味著所有的 密鑰將是字符串，
和所有那些的值的 密鑰將是整數。
>> 這意味著，我可以 然後引用該特定數據
我想用這些鍵，而 比使用數字索引像我
將有一個標準的陣列。
現在，讓我們來看看，有 一個重要的事情
我也想提一提 這個代碼特定序列。
那就是有 另一種類型的數據，
或者說有這 數據的想法是
包含在斯威夫特叫自選。
>> 什麼自選的意思是 它承認的事實
有時你不打算 讓你真正期望的數據。
所以我的意思是is--我們 看看這個代碼序列
它遍歷所有的 傳遞給這個代碼參數
並試圖將它們轉換，嘗試 分裂成各種字符串，
因為它接受一個非常 特定類型的說法。
然後它會嘗試強制 表示數字的字符串
到整數的成績， 我可以再計算。
>> 所以基本上我要 使用這種拆分功能
內部存在 雨燕標準庫。
我將傳遞到它的 我想分裂字符串。
然後在使用該 那種時髦的語法，這
我不知道我們是否會 拿地，但也許，我們
實際上指定精確 字符，我們要分割的。
那麼，這實際上是什麼樣子的？
讓我們來看看 實際運行這段代碼。
>> 因此，舉例來說，假設我有 一個測驗，我得到了50上。
我有一個pset和 我上了一百年。
我got--還有另外一個 測驗，我得到了40上。
我敲回車，並最終什麼 會發生的是，它在做什麼
正在這些參數，分裂 這些冒號的字符串，
認識到有 在每一個兩個元件，
和它的本質 跟踪每一個。
>> 所以，我有我的字典測驗，其 值由數字50表示，
我有一個PSET有100個值， 和一個測驗1，其具有40的值。
後來在我的代碼 實際上平均所有這些值
並列出所有的鑰匙 特定的字典。
但是，這是很重要 這樣您就可以看到
正在發生的事情，是我們 想要做的就是採取這種字符串
並在這個角色拆分它， 我們可以用這個分裂再做
使用這種功能 有趣的語法，在這裡存在。
>> 只是現在認為這是確定。
我們將看到更多的這種 在短短的一小會兒。
但是現在有一個有趣的 我們實際上是縱橫
想嘗試將其轉換 字符串轉換為整數。
但在其他語言 什麼可能發生的情況是
我們可能會嘗試 要做到這一點，要么拿回
一些定點 價值像負一層
或者一個空或類似的東西。
或者，也許它只是導致了錯誤。
我們將不得不 再搭上這個錯誤
然後嘗試做 一些基於這樣的事實
這種轉換 為整數失敗。
這就是這個想法 自選的用武之地。
實際上，你可以創建一個數據類型 是一個int問號，例如。
這意味著，該整數 是，實際上，可選的。
並會發生什麼事是，它可能 包含一個整數，也可能不會。
它可以是，事實上，是這樣的其他 的想法，完全是被稱為NILL。
其中這意味著有 沒有任何價值在於此。
它甚至不是零， 這裡還有沒有價值。
有代表完全沒有價值。
>> 而這正是該行71在做什麼。
是，它是說，我 想嘗試設置的值，
一個名為分級變量，等於 這種轉換成字符串一個int。
所以，我已經採取了這個字符串， 這第一個組件，
或者更確切地說，第二 元件，因為這
是零索引的這一點， 字符串，我已經分裂。
我想轉換 該為整數。
但它並不總是進行 通常情況下，因為想像
如果會發生什麼，而不是類型 一個數字，I型，當然像航空自衛隊。
>> 它會失敗。
它實際上並不將會 能夠將其轉換成一個整數
正如我所期望的。
因此，而不是開球 某種錯誤的，
我們有這樣的想法可選的。
這意味著，使用 這個問號，我可以說，
OK，是有可能，我可以帶 這一點，將它轉換成一個int，
並把它變成一個變量， 這也將是一個int。
如果是這樣，則該裝置 說，這是成功的
與該第一部 該塊可以繼續。
>> 否則，它將失敗。
有一個在grade--沒有價值或 而沒有在現有的沒有價值，
實際上我不得不嘗試 處理這種錯誤情況。
你會看到這 問號所有的時間
在斯威夫特和對雨燕的示例代碼。
而事實上NILL運營商，這種 的問號，在自選部分，
將是大概1 更困難的事情
排序的周圍包裹你的頭 當你真正使用它。
>> 它可能是有意義了。
而事實上，當我 編寫示例代碼這一點，
我當然明白 發生了什麼事情，
但還是被抓住了我 驚喜每隔一段時間
當我發現， 一些數據實際上是
一個零的版本，可選的版本 數據是我所期待的。
因此，只要意識到，如果 有一個可選的版本
你必須解開的 從這個框數據。
>> 因此，這有點像我 - 想像一下，如果你 有一個盒子，它包含的東西。
而你需要做的 是要問的問題，
有沒有可能，這個盒子其實 包含了我要找的數據？
如果是這樣，則拔出該數據輸出和 把它放到這個變量存在。
如果沒有，那麼我只需要 忽略此框的內容
完全是因為它 從字面上包含什麼。
>> 這方面的問題嗎？
OK，讓我們遠離本 排序基於命令行的事
並開始尋找 一些技術
這Xcode提供給我們 在操場的形式。
所以這是一個很大的 這裡的能力與斯威夫特。
如果你打開Xcode中，它 問你想要做什麼，
你可以打開操場 和剛玩
有很多不同結構的 語言和方面
之前，你甚至開始接觸 iOS的SDK或Mac的SDK。
>> 所以這種情況下，讓我們說，我have-- 我有一個相對人為的例子
在這裡，但我承擔，因為我們排序 通過本實施例的工作。
比方說，我們做了很多 指數與一固定值，
就像我們知道我們將需要 做了很多方形的權力，例如。
因此，我們要採取一些價值 X，我們要正視它，
我們要採取一些價值 y和我們要正視它。
等等等等。
>> 現在，我們實際上可能只是創建一個 2功能，這種力量，對不對？
所以我們會創建2功能的電源。
我們將接受一個雙。
我們將output--否則我們將 返回double類型。
我們將這一結果 然後兩次
其實我們需要的結果，這 被初始化到1的值，
並用x乘以它。
因此，在本質上，我們有x次X在這裡。
>> 所以後來我能的話，因為我們可能 期待，取2本，運行功率，
提供給它的一些數據，我喜歡2.0。
我們能看到這裡4.0的結果。
運行2開機3.2，我們 能看到我們的結果，10.24。
到目前為止好，對不對？
現在，我們正在想，好了，OK。
現在，我確實需要 做了很多3權力。
所以我會複製粘貼所有這些代碼， 改變從所述函數的名稱
2電源的功率3，和一切 將除該值相同
這裡，該範圍內，1 ... 2。
>> 因此，而不是重複 這個循環兩次，
我想重複這個循環三次。
所以，我只是改變從價值 1至3--或是從2至3。
如此反复，同樣的代碼， 這是唯一的改變。
現在，這也適用。
3功率在2一些價值提供。
我們得到8。
所以，2立方。
和3.2立方是32.768。
到目前為止那麼好，對不對？
但希望這是一個小 紅旗為你的位
在我們現在有 一些代碼重複
除了一些很輕微的 改變從一個到下一個。
所以，有一些方式， 我們也許能夠簡化
這個問題，在這裡我們實際上可以， 在運行時，找出了一些，
向我們提供了一些功能有 正是我們想要的權力。
>> 並有這個想法 關閉，這是真的，真的
在斯威夫特的情況下重要的是， 而且在許多其他語言。
但可能你會看到 它使用更多的是在斯威夫特
因為它的嵌入 在語言中
比你在其他 同時現代語言。
所以一個封閉的想法 是這樣的，就是我們
可以具有意指一個函數 是一個通用的功能，通用電源
功能。
>> 並且這個功能是要接受 這一指數，我們實際上
要創建。
因此，例如，第一個 例如，我們希望是2的冪。
因此，我們將提供電力 然後在括號2。
現在注意什麼 這實際上返回。
這需要一個引物的一個輸入端 所謂ÿ該是一個整數，
並返回這個瘋狂的尋找 在parentheses--括號內的事情
雙然後雙箭頭。
>> 這是什麼意思是，我 要返回的函數。
我不回 另一種類型的數據，我
事實上返回一個函數 具有此參數，即
接受一個雙輸入和 輸出一個雙作為返回值。
而作為一個結果，因為現在我已經叫 動力，傳遞一些Y值，
和我創建這個其他 function--通知，有
這是正在創建另一個功能 this--裡面我在做什麼
是我可以再改 該值，即1
我已經改變價值 從2到3，我現在使它y的
>> 而這種情況繼續下去。
所以每次我打電話電源時間 的，基本上會發生什麼
是，我得到返回的功能。
請注意，這裡我定義 一個新的變量叫做廣場。
我已經將它等同於權力， 提供這種價值2的力量。
而這是什麼返回的功能。
所以方時，變量 廣場上，是功能型的，現在
有this--哎呀，滾動了 小bit--有此簽名，
接受雙重輸出雙。
>> 所以，現在我做了什麼 是我已經基本上
創建一個函數調用正方形 接受任何價值，將廣場吧。
我們可以看看會發生什麼到這裡。
廣場3為例，意味著我要去 取值3平方吧。
那麼究竟是如何工作的呢？
當我傳遞2--電源，當我 經過2到功能這個權力，
這個變量y是 填充了值2。
並且在內存中的排序舉行。
那種認為就像在舉行 狀態，在計算機的某處，
我們並不真正關心如何 或如在這一點上。
>> 但我回到這個功能 所謂exponentiate。
再次，它其實並不重要 這是什麼函數被調用，
我們真的可以把它叫做什麼，那 接受雙擊並返回一個double，
但使用此值y它裡面。
因此，即使它的這個功能， 該冪運算功能的
被返回到我 變量，我叫方，
它包含在其內 這個概念是什麼y為。
它會記住。
>> 所以，我每次調用函數， 現在叫方，它使用。
但是，這也意味著我可以 創建使用另一個變量
不同的權力。
這樣我就可以創建一個立方體變量， 例如，提供給它的3次方。
現在立方體實際上採取一些 價值和多維數據集並返回。
所以我們可以看到，我得到 值8出來的。
>> 但是，y值也沒有 改變，因為他們是
在排序自變量舉行。
排序他們舉行 在顯存獨立的空間。
所以立方將永遠有 x到3的功率。
和方總會有 x到2的冪，該
意味著廣場將永遠 平方數，如我所料。
和立方體將始終立方 數字，如我所料。
這也意味著，有時候你可以 得到某種時髦的尋找語法
在這裡你有權力在最 屏幕下方位置，5個電源。
並傳遞到結果。
你調用該函數這 被送回的數目4。
還等什麼本質上這 是4至第五功率，
我們可以看到的結果出現。
隨著我這麼遠嗎？
>> 所以這個想法被稱為閉合， 因為什麼我們基本上做
是我們封裝 一些數據into--排序
包圍該數據的 成一個功能，我們
能夠重複使用此功能。
現在這個語法，雖然實際上可以 簡化大量。
而且有很多的可能性， 在斯威夫特的這種簡化。
那就是什麼樣的 後來的實際看看。
因此，在圖7b的例子中，我們 藉此完全相同的代碼。
>> 但現在，而不是 實際上定義一個函數
這款電源的內部 功能，並給它一個名稱，
然後返回的名稱 該功能，其中
然後被用作一部分 這種封閉，而不是我們
只是要簡化它。
我們不需要此功能來命名。
因此，這是一個企業的概念， 匿名函數在這裡我們可以再
接受作為輸入，括號中的此處， 變量x是double類型。
>> 我們要返回double類型。
然後關鍵字，n為 此功能的開始。
所以看到這一切的 是大括號中
與我們定義的 匿名函數在這裡。
只是一個簡單的方法 定義確切的同樣的事情。
好不好？
但對於斯威夫特居然讓我們 更進一步，簡化甚至更多，
因為我們真的不 關心這個參數是
命名任何特別的事情。
它可以真正被稱為什麼， 我們仍然可以使用第一個參數。
>> 所以其實有這個特殊的 在匿名函數的數據類型，
有這個特別的名字 在匿名函數變量
該下手了 美元符號和代表
參數號，零 索引，對於該功能。
因此，有幾件事情怎麼回事。
在這裡，我要回來，然後 大括號代表的功能，
對不對？
>> 我不定義通知 參數類型或返回類型。
它實際上可以推斷 因為簽名的
這種原始的功能。
因此，我們可以消除 作為一個可能性。
不過，我也可以用美元符號零 代表這個第一個參數那
通過這個匿名函數。
因此簡化甚至更多。
好不好？
到目前為止，一切都很好？
>> 現在，這種類型 - 你 記住這個美元符號為零
我們在這個大括號看到 我們看到的只是一小會兒
以前在這個斯威夫特6的例子嗎？
就在這裡。
請注意，這正是 我們正在尋找，
是，我們已通過 這個split函數
匿名函數 檢查第一個參數
看它是否等於結腸符號。
而這正是什麼 情況的發生，是所有
我們doing--回報 關鍵字暗示
在這個case--我們返回 這個數值在那裡我們比較
針對第一個參數 這種性格結腸。
所以排序的神秘面紗了。
而且你會看到這個結構 很多雨燕的語法，所以做了保留
在當你的頭腦 採取看看這個。
現在，我們可以下車 導軌一點點
去真正看中的那個節目 甚至一些更斯威夫特的權力。
你甚至可以看到一些 這些樣本代碼。
所以這就是為什麼我要去 顯示這個給你。
>> 基本上我們可以做的是，首先 所有的人，這是一種不必要的我
實現這一切權力 如果導入達爾文的代碼，因為
圖書館，它實際上包含一個函數 所謂的戰俘，這是否適合你。
因此，我們可以簡化甚至更多， 有我們的電的功能，現在只需
是一個美妙的單行，我們只需 返回此匿名函數
接受美元符號0作為其 鹼和y為指數。
>> 但是，我們可以得到真正的， 真正看中的，當我們
意識到斯威夫特有 大量的電力引擎蓋下。
很多經營者認為 我們一直在處理，
加號和除法的符號和 所有這些事情，你通常
與數據類型進行操作 在編程語言中，
實際上是可擴展的斯威夫特。
因此，在我們意味著什麼 可以定義我們自己的運營商。
>> 所以，現在我累了打字的這一切 POW然後一個括號，然後
基。
我不想這樣做。
其實我是想有一個 運營商，可以讓我這樣做。
所以，我可以告訴雨燕，我想 創建操作員，星
通過我不能用克拉的方式star-- 因為克拉是一個操作符
做別的東西完全。
所以我不想排序 對碰撞的。
還等什麼，你在各種看看 語言，包括Python，
就像星級星級運營商 代表指數。
>> 所以這是唯一的原因 為什麼我已經做到了。
它的將是 中綴式操作。
我不得不提供 它的一些信息
關於這個優先 運營商因此它的左結合。
這就像比較 高優先級比較
求和或乘法。
這是更高的優先級 比所有這些。
等等等等。
然後我定義 實際上功能
決定了這個符不。
所以，假設我有一個左 手側和右手側，
這將是一個可能 更好的變量名這一點。
左手側和右手側。
那麼我可以採取的這種力量 左手側到右手側
並返回該值。
所以，現在它的超級甜蜜。
所有我們所要做的就是2星3星 那就是2的3次冪，
我們得到的值8。
2星級10星是2到 10次​​方，我們得到1024。
>> 所以，現在我們的功能力， 這再次是不同的，
因為這背後的整體思路 是，我們有一個功能
總是需要一定的價值， 乘以它 - 或者更確切地說，
以指數以相同的功率。
所以，現在是更簡單。
所以，現在它只是美元 簽字0星級星年。
我們甚至不必再使用戰俘。
>> OK，誰的損失？
我們是做的不錯？
對這個東西有任何疑問？
是嗎？
>> 聽眾：當你 - [聽不清] Ÿ雙重的恐懼力量。
因此，當你返回的功能。
DANIEL Armendariz環： Ÿ雙電源臨陣脫逃。
哦，是的，我不知道 是什麼在y數字。
我們對此深感抱歉。
>> 聽眾：你為什麼要回國 函數[聽不清]外殼。
是不是美元的零星級 明星Y [聽不清]
發現與該操作者 返回雙[聽不清]翻番？
>> DANIEL Armendariz環：因此，讓 我回答你的問題
我是如何理解它，你能告訴我 如果我沒有理解你的問題。
所以這個結構中，大括號 美元符號零星級星級Y，
是一個函數。
它接受一個參數是 這個美元符號零表示。
return關鍵字是隱含在這 很短，匿名函數的語法。
>> 這意味著，基本上 這是什麼說法
是，我定義 function--然後我會
只是把它something-- 在那裡我有一些值y。
我有Y，這是雙。
而我回了雙。
我有回報中y--對不起， 我不應該叫這個y-- X。
哦，親愛的，哦，親愛的，哦，親愛的。
X-- nope--明星明星年。
>> 所以，這只是一個 這個簡化版本。
等等原因，我有美元 標誌零的是，使用這個外殼
意味著我不再有 鍵入戰俘，或不再做
我要做的事情 像三星級星級2。
我可以有一個 函數調用方
這將始終以 一些價值作為輸入
實際上返回到那個正方形。
>> 這樣封閉的全部目的是 只是有點封裝事實
我總是想用y時 我調用該函數為動力
採取這一指數時。
所以回國以後，一 函數接受
雙，這是基礎，並 返回該指數的結果
是這裡的關鍵。
這就是主要的區別。
只是有一個有點蓬勃發展。
>> 這是不是有什麼不同 相比於現有的例子，
但它只是一點點 一個蓬勃發展，我們實際上可以
創建斯威夫特操作 實際上做的東西吧，
這是一種一件很酷的事情。
難道我回答你的問題？
甜蜜。
任何其他事情之前，我們繼續前進？
好不好。
>> 那種現在這個乞求 問題是that--以及OK，
現在我們有能力為 要返回的功能。
我們也可以將函數作為數據 或作為參數傳遞給其他的功能呢？
而事實上，我們可以。
因此，讓我們說，我們有 所有相同的代碼。
我們有方形變 將方這段代碼。
我們有立方體變量 將立方體的一些數據。
而我們真正想要申請 大範圍的數字。
>> 所以，我們也許會做， 當然，這當然是有效的，
是迭代的數字列表 並運用我的職能平方和立方
並獲得作為結果兩個新名單 這是該平方原始列表
和立方，分別。
完全可以接受。
但有什麼東西， 我們在這裡看到的是，我們有，
再次，我們的代碼重複。
並有可能是一個機會 讓我們來簡化這個一點點。
如果有一種方式讓我們什麼 實際上總是遍歷一些列表
，只是傳遞給這片神奇 函數的變量
代表一個功能 我們希望應用
到該列表中的每一個項目。
這帶來了的概念是什麼 被稱為高階函數。
而這本質上是這是什麼 是，是，我們可以創建一個函數。
>> 在這種情況下，它被稱為 映射器，只是為了給它一個名字，只是
在每一個映射 在一個列表中的單個項目。
在那裡我把名單 我需要的功能。
和該函數，當然， 具有一定的簽名。
它接受作為參數雙 它會輸出是一個雙。
而整個結果 這個功能是將
成為一個新的列表是double類型。
好不好？
>> 而我什麼都做 是將此函數f
在我的列表中的每個元素。
和reply--和回報，而這個新 列表作為其結果，這是非常涼爽。
現在我可以通過周圍的功能。
而這個想法高階 功能是非常重要的。
這映射實際上只是 窮人的實施
這是建立一個功能 到斯威夫特稱圖。
而它正是這樣， 甚至更好一點。
>> 這有點只是一個通用的， 簡化版本
讓我們看到了 概念適用於這裡。
現在，順便看看我 實際上可以申請我的平方
和我的多維數據集函數 到的數字列表。
我跑我的映射。
我給它提供了我的號碼列表。
我提供給它的 函數是怎麼回事
適用於每一個這些指標。
它將會是 輸出作為結果。
我會看到我的平方 和我的立方數作為結果。
>> 當然，映射器會 任何形式的匿名函數。
我們甚至可以看到，我已經創建 一個新的匿名函數
只是需要一些參數 和除以2吧。
我們可以看到，我已經在事實上， 由2分，而不是我的名單。
很酷吧？
到目前為止，一切都很好？
好了，現在讓我們 回到這個想法。
讓我們實現這個早在 一個成績簿的上下文中。
>> 如果我這樣做，我們可以看到，我可以 適用於各種各樣的這些選項 - 中
或多種這些 高階函數
實際上簡化了我的能力做 各種對數的列表的東西。
因此，舉例來說，如果我 取號碼的列表，
的高階功能之一 存在被稱為降低。
有什麼不減少，而 比圖，減小將
取兩個元素在列表中， 將採取一些函數
的兩個元件相比較 列表，它將再
排序output--的 該函數的輸出
將是另一個元素 那麼你和別人比較。
>> 所以，你可以使用這個實際 總之在你的列表中的數字。
例如，如果你有 清單1，2，3，4，5，
你拿的第一要素，1和2。
您可以將它的另外 函數，它的兩個元素
並吐出這些元素之一， 這將是的值3。
然後我們採取的價值3下一個 列表的元素，求和這兩個，
然後不斷下降的列表。
>> 我們正在減少 列表以一個單一的值。
它只是恰巧 該加符號
是一個操作符，就像我們剛才看到的。
這是運營商 實際上是一個函數，
正是有這個名單，我們 希望，而這些屬性
我們希望。
所以，我鼓勵你 看看這個。
我要排序的舉動 從一些這個代碼
所以我們實際上可以看一些 實際的，真實的，真正的斯威夫特在Xcode，
在iOS開發。
但是看看 這一點，看看能不能
通過分析這是怎麼回事 這其中的一些高階
功能，包括過濾器， 減少的，你甚至會
看到某處這裡映射為好。
就是這裡。
其中，這將需要一個序列 等級的，它實際上會
使用開關結構映射它們， 你可能從C承認，
但實際上這是一個很大的 比開關構造強大
我們有C.
>> 我們將它應用到 列表中的每一個元素
實際上提供 每個字母等級
使用所有這些概念的等級 我們剛剛談到之前。
現在，讓我們迴避的只是一個 分鐘，談結構。
所以結構是用C等待我們 能夠定義一個新類型的數據。
結構內斯威夫特存在。
所以做了很多其他的構造 所謂枚舉和類，那真的
拿這個想法一 完全不同的水平。
>> 基本上它只是一種方式 的定義新類型的數據。
所以，如果你get--如果你來 跨類或結構或枚舉，
不要混淆了它。
它定義了現在的樣子 一些新的特定類型的數據。
這是非常重要的，當 我們談論的iOS應用程序開發
因為一切 在iOS應用中存在
實質上是某種類型的對象。
和對象基本上是一個 類或枚舉或結構。
>> 因此，在這種情況下，我 定義一個新的數據類型
那我打電話評估 這是一些特性，包括
名稱和等級的序列。
所以，一種類型的評估 我可能有一點
會測驗，例如。
我希望有一個 評價這是一個測驗
並有各種檔次 與該相關聯的，對於測驗1，
測驗二，等等等等。
>> 或者我可能有不同的類型 評估問題套。
我可以做的事情。
其實我可以有 這種類型的內部功能
的數據，這是現在所謂的方法。
所以，如果你曾經看到的 單詞的方法，它真的
就是這樣一個應用功能 一個非常具體的類，
或將數據的一個非常具體的類型。
它使我們在修改數據。
>> 因此，換句話說，如果我想 增加一個年級到我的判斷，
那麼所有我需要做的是 追加這是輸入分數
這個功能 我的內部屬性。
還有一個整齊的結構在這裡 在斯威夫特，這是本點點點
操作者，這意味著可以​​分數 現在接受任何數量的整數。
和分數將是一個 整數數組
已經傳遞給我的功能， 意味著我可以做這樣的東西。
>> 我可以做補充牌號，只是提供 任意數量的整數進去
並且實際上可以提供一個數組 在我的函數的值
還是在我的方法，就是這種情況。
現在，這是重要的，因為 一切都在Xcode中，一切都在iOS上，
實際上是一個對象。
所以，記住這一點 當我們胸圍開放的Xcode
並跳到超越iOS的 二三版本和
居然去四個版本。
>> 再次，這一切都將 張貼研討會頁面上。
的iOS 4是那種一個完全成熟 實現一個非常基本的應用程序。
什麼這個程序的作用是它 加載UI，它看起來像這樣。
同樣，如果我們點擊故事板，我們可以 看就知道是什麼樣子。
這是UI。
它有一個冠軍在最高層。
我把它叫做Web畫廊。
>> 在中間有一個元素 所謂的UI圖像視圖。
並在底部有一個 工具欄用一個按鈕
具有彈性的空間，從而使其 中心在此工具欄的中間。
什麼情況是，當這 加載它下載一個JSON文件，該文件是
其他地方的服務器上載， 分析認為JSON文件，
和JSON文件看起來有點像這樣。
JSON文件看起來是這樣的。
它就在那裡。
>> 它有一個專輯名稱， 它有照片的陣列。
每個這樣的照片 有一個名字，也
這代表了一​​個URL本身 JPEG版本的單張照片。
那麼什麼發生的是，這個程序的時候 負載，它下載JSON文件，
解析它，使這一切成為 在iOS中的數組相當於
應用程序的開發，這是一個NSArray。
然後我就可以加載 該數據到應用程序
並加載它在我的屏幕上。
>> 有被加載的圖像 與在最底層的按鈕。
如果我點擊獲取下一個圖像，然後它 拉的形象從互聯網
並替換該圖像 在UI圖像圖。
所以，你可以下載這個，實際上 看看在您的計算機上。
並構建它，實際上 它編譯到您的設備。
但實際上這個過程是 這一點，創建storyboard--
或者更確切地說，沒有create-- 但選擇的故事情節。
實際上we'll--如果你不mind-- 我們將只需幾秒鐘
實際上告訴你如何做。
>> 為了讓我們如何能真正 實現這一目標是由多一點點
顯而易見的。
單一視圖的應用程序，我 要調用這個研討會
4表示此 特別號碼。
將它保存在桌面上。
OK，去點擊的故事情節。
而我什麼都做 是找我的形象來看，
將其拖動到我的用戶 接口和中心吧。
現在只是圍繞這很不幸 是不是打算做了一大堆，
除用於在屏幕 這是這個確切大小。
>> 因此，我們可以通過說服了自己， 點擊這個雙圈的事，
打倒這個流行 菜單在這裡和改變
預覽，我們實際上會 有機會預覽如何
這實際上 看看在其他設備上。
正如我們所看到的，我們甚至不 看到它在這種特殊情況下。
所以，我要關閉這個現在。
>> 我要去選擇 該圖標下來很
在屏幕的底部。
它說，解決自動佈局問題。
對不起，它在底部切斷。
但是，如果我點擊了，我 得到的是這種流行up--消失。
我得到的是這種彈出的 允許我補充缺失的制約。
通過這樣做，它 排序然​​後將其鎖定
成的中心部分 屏幕就像我所期望的。
>> 現在，為了得到這個按鈕 它的上面，我需要去編輯。
去嵌入和點擊 導航控制器。
什麼，會做的是，將增加 這整個的其他組件來了，
但它實際上鏈接 這回我原來的UI。
和細節，再一次，我們不 真正需要關心現在。
但我希望有一個 在工具欄的最底部。
所以我會檢查顯示工具欄。
>> 這提供了在我看來， 這是目前其他地方，
我們可以看到它掛在這裡。
它現在提供了一個工具欄 在我的UI的底部。
所以，現在，而不是選擇一個 圖像視圖，我能找到一個標籤，
或者更確切地說，一個toolbar-- 讓我們來看看，這裡是什麼？
什麼是它叫什麼名字？
一個button--項目bar-- item-- sorry--欄按鈕的項目。
撲通有和應用一對夫婦 在任一側的靈活的空間
真正的中心。
所以，現在我已經創建了我的UI，基本上是這樣。
我可以給它一個名字 雙擊在最高層
這裡說的網絡畫廊等。
現在再次，這些都是元素 通過自己的存在。
我有連接 他們給我的代碼，
我可以再次把做 了這個雙圓圈圖標，
從預覽變化。
其中，順便說一句，現在我們可以看到的是 很好地為中心，會好看
上的各種設備。
>> 切換到自動，這將 調出的ViewController代碼。
而現在這部分是非常重要的。
為了讓您連接這些 兩個元素，你的代碼的UI，
您選擇的項 要連接。
因此，在這種情況下，我們 其實想編碼
更改的包含圖像 在這個UI圖像視圖。
因此，從如果你控制點擊 圖像視圖和阻力，
你會發現，你得到一個小酒吧， 當你放手這一切流行
起來會發生。
>> 它說，我們將 創建一個連接。
從這裡我想給它 一個名字，像畫廊。
按Enter鍵。
這實際上提供 一個變量稱為畫廊
我就可以在我的代碼引用 改變圖像，例如。
那麼，如何該代碼實際上看？
好了，我不想 花太多時間就可以了。
我鼓勵你 下載看一看。
但其中最1 重要的方面是代碼
實際獲取的圖像。
>> 因此，在這種情況下，我想 在我的照片，以達到
陣列，載 在我的課。
我想定義名稱和URL 這是被解析出這個JSON的。
其實要求的設備，以獲得 URL，從這個獲取URL，
然後取從數據 該URL的內容。
然後將這些數據轉換成圖像 通過它傳遞到UI圖像。
如此反复，這些都是不同類型的 的目的，不同類型的類。
>> 然後我就可以把我的 gallery.image等於該數據。
這就是那種肉 它實際上是再
能夠改變數據from--變化 圖像從一個到下一個。
如此反复，現在希望 大量的構建體
將多一點點感覺。
請注意，有一些 感嘆號這裡。
感嘆號點 本質上涉及到自選。
>> 什麼我基本上說的是 那甚至不用檢查
看看是否有數據 在此可選，
我要繼續前進，承擔 有和解開它。
請記住，我們使用的比喻 排序包為自選的
我們需要解開 包拉出來的數據。
感嘆號 力量竟然發生。
>> 但我知道，這是 安全的，因為我檢查
看是否圖像數據等於 為nil，我實際上檢查
如果可選看到 ，事實上，失敗了。
如果有，其實已經失敗。
所以我敢肯定，一旦我得到這個 點我可以肯定地解開這些數據。
你也可以看到它在 問號的形式。
因此，如果我們向下滾動到哪裡 需要實際解析數據。
>> 所以，不要被推遲 這些排序冗長的名字。
您可以在蘋果找到 開發網站很多
引用的所有的 對象和所有進程的
這實際上使這一切成為可能。
但是請注意，這是本質 在那裡我通過它的一些數據的功能。
我找回一些類型的數據。
我需要以此為關鍵字來 將其轉換成該NSDictionary的？
這又是，一個 可選的NSDictionary。
然後我需要 檢查，看它是否存在。
>> 這樣我就可以使用，如果讓 成功等於解析，
後來我知道，那可選 實際上包含了一些數據。
或者是我在這裡做是為了 只是假設，如果有
沒有錯誤，它實際上是安全的。
好吧，我要感謝 大家的光臨。
我知道這是很多， 但它只有一個小時
談一些 很先進的東西。
所以希望你會得到一個 機會來下載所有的代碼
並採取更好，更 深入了解一下吧。
排序說服所有的自己 的東西，是怎麼回事。
我要感謝你 所有的再次光臨。
祝你好運與您的最終項目。
祝你有美好的一天。