天宇劉:哎,怎麼是 它會大家? 這是iOS應用 對目標C研討會編程。 我的名字是劉天宇。 我是一名大三洛厄爾現在, 集中在計算機科學。 因此,在這個研討會上,我 要教你們 如何使一個應用程序,一點點。 耶,興奮吧。 所以,之前,我們甚至開始跳水 到實際編程方面, 讓我們真的非常快說說 你為什麼會想建立一個iOS應用程序? 為什麼如此的iOS真棒? 因此,第一個問題,在第一 事情是相當真棒對我們來說, 尤其是作為CS50 學生,是的iOS 使用目的C.嗯,有 一種新的語言叫做雨燕, 但我們不打算 使用,在本次研討會。 如果你有興趣斯威夫特,有 是一個關於獨立的研討會。 但目標C基本上 C.含義的一個超集 在C使用一切可以 翻譯成目標C 很容易。 正如你可能會看到後,確實 有一些非常基本的語法,是 基本上完全一樣, C和Objective C。所以, 既然你已經採取CS50 了這一步,你已經 知道目標C,至少40%。 此外,蘋果公司有一個非常 強大的API為iOS。 有很多很瘋狂的 東西,你可以用它做。 其中之一是有人 實際上創造了一個iOS應用 用於控制汽車,其中 是非常有趣的。 可能是直升機更精彩。 但是,這是多麼強大 iOS的API即可。 正如你可能有 想通了,現在, 堆棧溢出大概是一 最重要的在線資源 提供給您。 而好消息,對於每一個 單一的問題,你都不可能 想同時建立你的 在目標C最終的項目, 有可能是一個堆棧溢出的答案。 這只是真棒。 除此之外, iOS的是一個真正的平台 在這裡你可以達到一個巨大的 觀眾毫不費力。 它不喜歡的Andr​​oid,在那裡 一切都非常零散。 一切的iOS是統一的。 只要您創建 對於iPhone的應用程序, 你可以很容易端口到iPad, iPad的迷你型,或不同的iPhone尺寸。 這些都是真的很方便。 它只是真的好 為打動你的朋友。 你可以只持有iPhone 告訴你的朋友嘿嘿, 這是應用程序,我做。 你可以這樣做,對於任何 桌面應用程序,這是很好的。 好了,現在讓我們真正得到 成目標語言C. 那麼,我們為什麼不先從 一些非常基本的語法。 正如我之前提到的目標 C時的C的基本上是一個超集 所以很多基本的語法都 實際上完全相同。 聲明一個變量, 加上兩個變量在一​​起 正是因為我們的馬里奧已經完成。 什麼是新來的。 同樣,房客for循環 和條件也是相同的。 你可以做一個循環,你 已經做了馬里奧[聽不清]。 你可以做條件 正如你 一直在做以前的P組。 然而,目標C 不完全是C, 並有東西, 是種奇怪的了。 第一種是,當你 做C語言編程,你通常打電話 包括,然後一個庫名。 但在目標C調用的進口。 基本上說的功能, 只是叫法不同。 和字符串 實際上有點怪異。 你可以看到,第一 這是種奇怪的事情 是,你有一個漂亮的weird-- sorry--你有一個非常奇怪的NS 簽在這裡。 第二件事 這是一種奇怪的 在你之前有一個at符號 實際上宣告字符串。 因此,在標誌的基本意義 一個字符串不僅是字符串, 它實際上是一個對象。 我們要解釋 後來所以不要 恐慌,如果你不這樣做 明白這意味著什麼。 並打印到控制台是一點點 因為不同的C語言,我們調用printf, 但在目標C,我們稱之為[聽不清]。 你可能想知道那是什麼。 這基本上是printf的, 只是不同的語言。 完全相同的用法, 完全相同的功能。 好吧,事實證明 Objective C的實際 有NS前綴幾乎 的一切,每一個基本數據類型, 的NSString,NSArray的,NSDictionary的。 的原因是納秒 實際上代表下一步, 這是一個公司, 史蒂夫·喬布斯已經成立, 這是一個公司,其中 語言Objective C的誕生。 因此,這基本上是傳統。 我知道這是一個有點 怪異,但它是蘋果。 所以,一些甚至怪異 比是一個函數聲明。 這與我們非常不同的 看到C,因為在這裡它實際上 看起來並不像C了。 你有什麼這裡 - 由 這樣,這不是一個小點, 這是一個負號。 你有一個減號括號 無效,那麼函數名。 遠的不說,如果我們 有你好世界,那麼 返回類型是無效 因為我們沒有什麼回報。 什麼才真不可思議 就是當你 具有一個以上的參數 通入一個相同的功能 將是很奇怪的,如下圖所示。 我們有一個方法名, 所謂addInt為[聽不清] 我們正在傳遞一個參數。 但在那之後,我們有 更多的方法名與調用。 經與我們傳遞 第二個參數。 這實際上是一個有點怪異, 但所有這些函數聲明 遵循相同的模式,因為這。 我們有一個減號開始。 減號可能是一個加號 有時是基於什麼樣的方法 就是它了。 方法基本上 另一名功能。 我們要去 解釋說,以後當 我們談論的對象 面向對象編程。 您首先確定回歸 鍵入括號內, 之後出現的方法名。 你傳遞一個參數。 如果你有多個參數 需要延長的方法名稱 基本上寫更多的東西在這裡。 它可以是任何你想要的。 在我們的情況下,它是用。 但你可以說結束,或或或 ABC完整的酒吧,任何你想要的。 然後你之後 傳遞參數b。 這是一個很奇怪 會展但我們 要明白為什麼蘋果要 要做到這一點非常快。 那麼,你如何調用函數? 調用目標函數 C也從不同C. 事實上,調用 在Objective C函數 更像是你與人交談。 在這裡,我們有自我,這 被稱作一個對象。 你基本上說的是 反對自我說的“Hello World!” 這是如何調用該函數。 對象和方法名 彼此結合。 這是怪異的擴展,其中 為方法名真正的用武之地。 讓我們來看看第二個例子。 我們只是定義了一個名為方法 addInt用等等等等等等。 因此,在這種情況下,當你調用 具體[?消息?]這是怎麼回事 看起來像自我addInt:用10:2。 這聽起來像英語。 雖然功能 函數的聲明是怪異, 對目標C的點 方法聲明的模式, 是,當你在呼喚 的函數或方法 它聽起來像實際英語。 所以這是非常直觀的 一旦你進入它。 特別是在這種情況下, 在那裡你可以基本上 看到函數名 排序記錄本身。 你不需要任何 更多的解釋,看看 究竟發生了什麼 只有一個參數做。 超越,讓我們談一點 關於面向對象的編程位。 面向對象編程 基本程序之一 技術或模式,是 使用目標C.目標C 被稱為目標C,不是 C,一個很好的理由。 所以,在我們進入 Objective C的語法, 讓我們真的很快看看 究竟是什麼物體。 我們可能已經做了一些事情 像之前的對象,這 被稱為當你的結構 實施樹或鍊錶 或[?試試。 ?]所以,這是 基本上像一個結構, 但比這更強大。 對象具有的方法和屬性。 方法基本上函數。 基本功能,一個 特定於某個特定的對象。 和屬性基本上是 現場您在結構中指定。 因此,對於每一個對象 我們有一些財產 有一些變量, 特定於對象。 我們有一些職能 也特定於對象。 和功能被調用的方法 和變量被稱為屬性。 它只是一個花哨的名字。 當你事實上,每一個單一的視圖 你看,當您打開一個iOS應用程序, 讓我們只說Twitter或Facebook, 你看到的每一個觀點是一種對象。 乃至整個應用程序是 開始與一個對象。 非常有趣的概念。 為什麼我們要的對象 面向對象編程? 所以你可以想像,當你 程序也變得相當複雜。 遠的不說,當你 實施棋盤, 邏輯將要 可以非常複雜。 你有36種不同的 件,所以,如果 想寫邏輯所有 36個不同的國際象棋, 那將是一個很大的 不同的函數和變量。 這是一個很大的麻煩。 大概你會寫 不同的方法或不同的功能 對每個片的至 精確控制他們做什麼。 但是,如果你做的面向對象 編程,所有的這些作品 可以抽象成 一個單獨的對象。 與該對象將具有一些共同 性能,喜歡什麼樣件 是什麼呢? 它是什麼顏色? 它如何移動? 並以這種方式有很大的 簡化了它的邏輯。 所以它只是一個非常好的辦法 作複雜的程序, 和層次關係 在程序中,很簡單的。 正如我們將看到 為什麼非常快的時候 我們實際上在做 programming--當我們真正 做一個S碼 以後的編程會話。 井除此之外, 面向對象編程 僅僅是一個很大的樂趣。 你必須設計自己的對象。 你一定要設計什麼呢 它看起來像自己。 沒有正確的答案。 它是完全有趣。 所以在面向對象的編程, 兩個基本概念 將類和實例。 一類是基本 一個模板為對象。 和一個實例是基本上 一個特定對象。 遠的不說,你正在做一個cookie。 在這種情況下,每單 餅乾,你居然落得 將是一個對象。 但餅乾板用來烤 所有的餅乾將是一個類。 一類是基本的模板。 和實例將是一個具體的 對象創建出一流的。 和實例將被創建 基於類的聲明, 我們將在以後的幻燈片中看到。 因此,讓我們實際上做一個真正 簡單的例子[聽不清]。 比方說,我們正在申報 對象為一隻貓。 對象應have-- 如若貓類 有一些屬性和方法。 什麼樣的屬性應該在的 類have--應該貓有哪些? 例如,顏色, 年齡和品種,這些 將變量 特定於每個貓。 而這些都是一些事情 我們用來形容一隻貓。 什麼樣的方法, 或者有什麼可以一隻貓嗎? 一些簡單的例子就追 鼠標,吃魚或只是喵。 這是一個非常快 例如貓類。 而一個真正的特定 貓物體將是一個貓 在這裡我們指定 顏色,年齡和品種。 在這種情況下,我們的目的是 不再是一個類了。 我們複製的模板從類和 我們指定每個具體信息 到該特定對象 使其獨立。 而當你在呼喚 對象內的方法, 你只需要調用喵的對象, 這是您剛才創建的貓。 也許你會打印出 類似的“Hello World! 喵。“ 漂亮可愛。 好吧,讓我們只 進入一些細節 看看究竟是什麼 翻譯應運而生的iOS編程。 因此,在iOS的編程每一個 類將在兩個文件中予以實施。 一個文件是在這裡,這 被稱為接口。 另一個文件是在這裡,這 被稱為實施。 通常情況下,接口 將有extension.h 正如我們所看到的C庫。 和實現文件 將有extension.n。 這是一種奇怪的。 但是.N指實際的.c,沒有 那些之間的根本區別 2。 所以在這種情況下,我們可以看到,我們是 聲明接口,貓:對象。 這就是所謂的繼承。 我們基本上繼承 從Object類貓類。 所以,每一個屬性和方法,這是 先前在該對象類中定義 將被自動定義 在貓類也是如此。 除此之外,我們定義顏色, 品種和年齡,三個變量。 實際上看起來像 一些你以前做過。 它看起來像結構。 即基本上語法 對結構聲明, 那是完全正確的。 因為我之前提到的, 區別一個struct 和一個對象,所述一個 根本分歧 是,一個對象具有的方法, 而結構只有變量。 因此除了屬性或 我們已經為對象創建的變量, 我們指定的一些方法。 遠的不說,我們在這裡有 兩種方法,一種是喵, 另一個是追逐鼠標。 我們可能要被傳遞 基於我們以前的方法參數 聲明格局。 你可能想傳遞一個鼠標。 你可能會想 返回一個布爾表意 如果你的貓已經成功 捉住了老鼠與否。 這是接口,但我們可以 看到實際的接口 沒有做任何事情。 它只是講述了一個什麼樣的程序exists-- 在貓類的東西存在。 所以,為了使 計劃做一些事情, 我們需要有執行文件。 所以在這裡,我們做的第一件事就是 很明顯,我們導入的接口。 當我們導入接口, 我們定義該方法。 遠的不說這裡喵 將剛剛打印出來 “你好世界!”到控制台。 並實施後, 文件中,我們幾乎完成。 這基本上是一個類 聲明一個類。 所以,現在的問題是, 你如何聲明一個變量? 該方法使用一個類來創建 在Objective C的對象是寫在這裡。 你先指定 這是一隻貓的指針, 因為在目標C中的每個對象 最終實現為指針。 你調用類,給他們打電話 作為ALLOC,這基本上是malloc的, 告訴操作系統您 需要這個對象的一些內存空間。 之後,你有一個對象 已經和你只是初始化。 這僅僅是慣例。 我知道這是一個有點怪異,但 這是蘋果公司實際上是怎麼做的東西。 分配的屬性是 其實很簡單。 這是非常相似 你在做什麼時, 你分配一些特定的 場結構內。 你只需變量 名,屬性名, 並指定一個特定值到它。 和調用方法非常相似。 調用的方法是 基本上是我談談 調用的目標C.任何方法 你傳遞一個對象,在 這種情況下,將是myCat, 而你傳遞的方法名。 因為如果你在談論的對象, myCat,你應該喵。 這是很有趣的。 在這之後,有一 更重要的設計模式 我們需要談談 之前獲得實際的S碼。 該設計圖案被稱為 事件驅動編程。 這也是最大概1 基本思想在iOS的編程。 所以,你可能不知道究竟是什麼 是事件驅動編程, 但它不是真的那麼可怕。 其實嘛,你有 已經做之前。 這是你可能的線路之一 已經寫在最後[聽不清] CS50的, google.maps.event.addListener(標記, “點擊”功能(){}):. 通過調用這一行你 實質上就是告訴計算機 每當事件被稱為 “點擊”發生在標記, 使用該功能。 這是非常不同 你在做mario.c。 在mario.c你只要運行該程序 一次,它給你的輸出, 就大功告成了。 這些都是有點像 一桿的方案。 事件驅動程序 是非常,非常不同。 讓我們想像一下,如果Facebook是一個 拍攝計劃它不是真正的好。 你只要去到Facebook 一次,它的完成。 它給你一些輸出 你從來沒有回來。 你從來沒有得到任何東西。 所以在這裡,特別是 我們使用模式是 事件驅動的,從而使 每一個功能都會 根據被抓什麼 事件已經發生了。 例如,如果我們有 一個按鈕,我們指定 只要單擊該按鈕, 調用調用的函數的“Hello World!” 這樣,我們才能真正 管理功能邏輯 流在一個高度靈活的方式。 用戶可以做或調用一個函數 已被調用。 它完全基於哪些用戶做。 所以我們可以看到,這是 比mario.c實際上要好得多。 而好消息是,它的 其實並不是一個新的概念。 你們已經做了 在最後一個問題集。 因此,在目標C有 三種不同的圖 事件驅動編程。 第一個圖是 所謂目標的行動, 在那裡你綁定按鈕 記者與一些功能。 遠的不說,只要你點擊 一些按鈕,你調用一些功能。 這是非常簡單的目標採取行動。 第二個是 實際上最難的之一, 這就是所謂的協議,代表團一行。 我們要解釋 在偉大的詳細版本。 而第三種方式是通知。 這實際上是不 非常重要的,因為遠 作為我們來講,因為機會 你要使用的通知 在最終的項目是相當低的。 所以我們要跳過這一部分。 我們要去潛水 插入協議的代表團。 那麼究竟什麼是協議? 或者,究竟是代表團? 讓我們來談談協議開始。 協議是什麼,但事件。 但是,這些事件被提供給 您可以通過蘋果開始。 舉例來說,我不是 完全確定你們有多少人 人使用蘋果的原 應用程序的郵件或聯繫人, 但每次滾動 表,並按特定細胞 在桌子上,也就是一個事件。 如果你想要做的 該事件自己, 它實際上是一個有點硬。 因此,蘋果已經考慮到甚至你 讓你可以直接使用 事件做一些你自己的。 協議實際上是 真的,真的很廣泛的應用 在Objective C.井 事實上,每一個單一的應用程序 有東西抓住了應用程序委託。 裡面的細膩是一切的 協議用於裝載應用程序。 遠的不說,有 事件的應用程序做負載。 所以會發生什麼你已經經過 創建一個應用程序,打開應用程序後, 關閉應用程序,或在後 你把iPhone睡覺。 這些是具有所有事件 已給你。 這些顆粒原本裡面 就沒有實現。 蘋果只是告訴你,這個功能 當一些事件發生的會發生, 但你做了什麼與 功能是完全取決於你。 代表團基本上是 告訴類 你應該處理這些協議。 這是一個有點 混亂,但是這將是 當我們做更清晰 在S碼的行動。 代表團的協議實際上是一個 非常穩健的機制在這個意義上 如果我們做的代表團 到一個特定的類, 我們基本上可以處理 各類賽事 使用任何類,我們有, 非常方便的工具。 因此一個簡單的例子為 在協議授權 將是我剛才講的。 該協議明確被稱為 的tableview [聽不清]選擇角色 在[?指數?] [?過去的。 ?]所以這一個 事件會被抓住,當你 實際上點擊一個特定的 細胞在你的tableview, 我們只能說在您的郵件 或者在您的聯繫人應用程序。 裡面的功能有 本來無所事事。 該功能不 做默認情況下任何東西。 但是,你可以指定 功能做什麼, 給你想要你的應用程序中。 非常方便的工具。 並與所有的 雖這麼說,我基本上 包括一些非常基本的語法和 對目標C基本概念 編程,我們可以做一些S碼。 更令人興奮。 因此S碼實際上是為 有點勢不可擋 當你打開它的第一次。 一個快速的注意,因此,如果您 想要做iOS開發, 我強烈建議你有一個蘋果。 因為這樣做iOS開發上 Windows是真的,真的很難。 這是可行的,但它真的很難。 你肯定做 不想用G編輯。 因此,在S碼我們 幾個不同的區域。 當你第​​一次打開S碼 你會看到一個導航區域, 這基本上說明你一切 文件是當前項目。 你有一個工具欄區域, 基本上是管理的意見, 或者一些小快 關於S碼本身的工具。 而這是實際的編輯器區域。 這個地區是非常相似克編輯, 但遠比克編輯好。 在這方面的權利,是 所謂的實用面積。 該地區變得非常方便時, 你創建的界面或指定 一些快速設置為您的應用程序。 和最終面積的調試。 此區域包含控制台。 所以每當你說的printf, 或者NSLog的在我們的情況下, 所有的結果 將要在這裡進行打印。 行? 我想我們真的可以做到迅速 一個例子為iOS編程。 讓我們實際打開了S碼。 所以每次你打開S碼的時候,它的 將出現類似的東西。 它會問你 你想讓我做什麼? 你想啟動的東西 隨機的,操場,基本上你 可以測試代碼,而無需 實際上犯任何應用程序。 你想創建一個新的項目? 或者你想繼續 工作在現有的項目? 在我們的例子中,我們要去 創建一個新的項目。 所以這是非常好的,S 代碼實際上早已 給你一些模板 創建對象。 如果你想要做一個遊戲,S碼 實際上有一個遊戲的模板給你, 有一個基於網頁的應用程序, 標籤的應用程序。 在這種情況下,我們要 做的東西很簡單, 而我們將使用 單一視圖的應用程序。 之後,只是你想叫什麼 您的產品,你叫什麼名字, 什麼是你的標識, 你用什麼樣的語言。 在這裡,我們不希望 檢查使用核心數據。 核心數據基本上是建庫的iOS。 如果你做的核心數據,S 代碼是要限定 很多更複雜的類為您服務。 所以把一切都簡單,我們 剛準備做沒有核心數據 現在。 我們將是問題 使用是that--問題 我們將要建立的是,我們 基本上想從C導入馬里奧 一個iOS應用。 因此,讓我們稱之為馬里奧的iOS。 當然你指定你 想要把你的項目。 還有,我們走了。 所以這是一個有點 鋪天蓋地,但其實這是 我們剛才看到的幻燈片。 和第一方面,我們看到現在 基本上是項目配置。 所以一切你想做的事 項目,什麼樣的設備, 讓我們只說什麼樣的設備 你想你的應用程序出現在? 它是iPhone,iPad還是通用? 所以設備的方向,這一切的東西。 不是很重要, 但也可以是,但這種 就是你設置了一個地方 你的項目,如果你真的 要部署到蘋果專賣店。 好吧,讓我們來看看 東西是我們的代碼中。 讓我們通過文件導航。 而這些所有的文件已經 附帶的模板,非常漂亮。 所以,當我們點擊其中一個 這是什麼樣子。 非常相似克編輯。 但是你可以看到, 語法高亮可能 一點點更好。 它實際上更 強大的比克編輯。 並且可以自動完成 很多東西你, 正如我們所看到的非常快。 讓我們打開調試方面也是如此。 好吧,我們可以看到, 控制台就在這裡。 這是你將成為怎樣看哪裡 你在printf的或nsloging東西。 因此,事不宜遲,讓我們真正 編譯應用程序,看看會發生什麼。 對於一個基本特徵 S碼,是S碼 配備了一個iPhone模擬器。 所以,你不需要有一個 iPhone試試你的項目, S碼可以模擬,對於 你,我們可以看到現在。 這是相當不錯的。 它採取了一些 時間位編譯 基本上我們有 一個空的應用程序, 這實際上什麼都不做。 但它編譯。 這是相當真棒。 這比C好得多,是吧? 好了,接下來就讓我們 嘗試添加一些東西。 一個文件,該文件是一點點 奇怪的是這裡所謂的故事情節。 這實際上是一個偉大的, 真棒功能的S碼。 因為在S碼的,你其實可以拖動 拖放元素到接口 它會直接顯示出來。 讓我們來試試。 我們放棄一個標籤在這裡的“Hello World!” 我們可以說為中心。 很酷。 現在讓我們來運行這個停止模擬。 在這裡,我們的“Hello World!” 我們甚至沒有做任何編碼呢。 你到底是怎麼回事? 這是多麼強大 Interface Builder中即可。 有人甚至說, 你可能只 完成無需編寫一個應用程序 大概一千行代碼 只是使用界面生成器。 但它可能不是 最好的辦法做到這一點。 現在,讓我們真正坐下來編碼。 這樣的結構的文件 其實真的很有趣 因為,你可能會看到,有 沒有主要功能的任何地方。 看到了嗎? 正如我們之前所提到的, 你可以看到這 是一個實現文件 對於一個特定的類。 但是沒有任何地方為主。 那麼,是主要的? 實際上,有一個主,但 主實際上是從你隱藏。 主要是在這裡。 這看起來很熟悉。 所以基本上什麼的iOS 正在做內部的主 是,每當主要是 叫,這基本上是 每當應用程序被執行,它 創建一個名為的AppDelegate對象。 正如我前面提到的,整個 應用程序實際上是一個對象本身。 因此,在這種方式,基本上 iOS應用程序是在告訴編譯器 那好吧,我要創建 一個名為AppDelegate中的產品, 那將是我的應用程序。 所以,你需要去 通過的AppDelegate ,看看那傢伙在做什麼。 我的工作是為我做的。 而在AppDelegate中可以看到, 也有一些很奇怪的功能, 其實好方法,即 蘋果已經給了你。 這些是什麼? 這些實際上只是協議 我在說什麼。 因此,這些都是事件,蘋果 給你下手。 有沒有在一些 現在的功能, 但如果我們想初始化 東西給我們的應用程序 進入前顯示 任何看法,我們在這裡。 你可以閱讀的名字,我猜 事件實際上是真正清楚。 所以,現在的主要創造 的對象的AppDelegate。 什麼的AppDelegate是要幹什麼 居然還藏著你。 在AppDelegate中即將開始 加載的ViewController股票。 因此,它基本上將開始 加載了所有你有意見 ,只是渲染視圖 基於層次上。 因此,在這種情況下,我們只有 一種觀點認為,這是在這裡。 所以這是唯一的視圖 那將被調用。 該邏輯的ViewController是在這裡。 這是代碼實際上是 控制我們剛才看到的視圖。 好吧,讓我們做的東西在這裡。 所以viewDidLoad中聽起來像一個事件, 而事實上,這也是一個委託, 這也是一個協議。 所以,無論視圖被加載, 一切都在函數內部 將被調用。 在這種情況下,我們應該看到“Hello 天宇!“如果我們運行程序。 它變得有點慢 編譯故事板文件。 確實很好,我們確實看到了它的輸出。 這實在是太酷了。 現在,讓我們真正做到馬里奧。 我要去定義 傳播非常快。 marioWithLevels:(INT)水平的結果。 好吧,這其實是真棒 第代碼自動完成功能。 所以,當你寫,然後鍵入回車, 它已經放棄了模板 對你來說,這是很酷。 這應該是真的 熟悉你們。 對不起,這是我的錯。 好吧,冷靜。 這個邏輯看起來真的很熟悉 到你們,特別是剛馬里奧。 但我們現在將打印出來 控制台每一次, 因為我們希望以某種方式繼續 賽道是我們打印的。 我們將使用 結果後來不知何故, 顯示打印 出結果給用戶。 因此,而不是我們只是 nslogging一切, 這是我們要存儲的一切 成一個函數調用的結果, 但邏輯是完全一樣的。 當我們完成它,我們 只是打印我們的結果。 在這裡,而不是打印出我的 名,我們將調用一個函數。 讓我們看看會發生什麼。 哎呀,很明顯。 我們有一個很好的 小金字塔在這裡。 這基本上是C,我們只是 操縱在那裡你調用一個函數 而如何做一個功能是什麼樣子。 沒有什麼不同。 但其實這是 不是很令人興奮的在這裡, 因為我們沒有看到 任何從iPhone應用程序。 所以,如果你真的有一個iPhone app-- 如果你確實有馬里奧的iOS權 現在,你不會 看到什麼, 有什麼關係,因為馬里奧 所有輸出到一個控制台 從用戶是隱藏的。 這就是你所看到的, 這就是的“Hello World!” 不好。 現在,讓我們盡量讓用戶看 究竟我們要打印出來。 因此,我們就不需要了標記。 讓我們試著找出什麼 否則,可能是有用的。 其實是有1 被稱為元件 文本字段,這可能 有很大的幫助我們。 它主要顯示區域 文本的可編輯。 所以,看起來真的很有幫助。 現在,讓我們將其拖放它。 哇,我們有一個文本視圖 在我們看來,真正看中的。 這是一個有點太大了。 讓我們把它縮小。 把它放到中心。 使其更小為好。 現在我們有一個文本視圖,我們可以 被用於顯示我們的最終結果。 但現在它的 絕對行不通的 因為有no--的 我們的ViewController剛 定義不知道 有一個文本視圖在那裡。 因此,我們需要以某種方式 鏈接文本視圖,我們只是 與類創建 已經和我們一起去。 我們這樣做的方式是 居然真的神奇。 因此,開拓故事情節。 有一個特殊的[聽不清] 所謂的[?助理?] [聽不清]。 當您單擊的是,它的 要打開兩個文件。 一個是一類,而另一個 為它的相應視圖。 這是非常,非常有幫助。 讓我們剛剛經歷.h文件。 控制,這是[聽不清]邏輯。 按Ctrl並拖動 文本視圖進入申報。 我們將調用outputView。 連接。 所以在這裡,我們已經宣布了新的 物業為我們的ViewController類。 而新的物業 僅僅是文本視圖 我們已經在界面的建設創造。 因此,在這種方式我們可以 訪問所有數據 和操縱一切,是裡面 輸出來看,這是真棒。 因此,在我們實際的代碼, 讓我們用它做什麼。 所以這個時候,我們都喜歡印刷 從最終的結果馬里奧, 我們在沒有任何記錄。 我的意思是,我們能保持 記錄的聲明。 除了這一點,我們 送讀出我們只是 創建的,在輸出圖,其中 TextView的是我們剛剛創建的UI。 現在,讓我們看看會發生什麼。 哇。 我們在應用程序中的金字塔現在。 這樣用戶就可以看到我們的輸出,因為 我們複製我們的代碼的輸出 我們的接口。 這是相當不錯的。 它實際上不是 令人興奮,因為我們can-- 所有的應用程序正在做的是 呈現出金字塔給你, 還有就是你可以做些什麼。 這不是特別令人興奮。 所以,現在讓我們做一個按鈕 這將明確的意見。 看來,一個按鈕會有所幫助。 拖放。 按鈕之一。 兩個按鈕。 所以,當我們點擊左側 按鈕,在視圖應該清除。 應該有什麼在屏幕上。 當我們點擊 右邊的按鈕,馬里奧, 認為會再次出現。 所以這樣一來我們也做了 神奇的東西,控制和阻力 在類的聲明 在助手director-- 在助手觀眾。 在這種情況下,我們指定 這應該是一個動作。 clearMario。 所以在這裡,我們已經創建 所謂clearMario一個動作, 這是將被調用的方法 當我們按下按鈕清晰。 因此,在我們實際的代碼,我們只 把輸出文本和輸出視圖 到一無所有,這樣 它會顯得清晰。 除此之外,讓我們創建 另一種方法叫runMario。 噢,對不起,這不應該是一個屬性。 好吧,這應該 成為一個動作為好。 而當該功能是 所謂的,我們只需運行馬里奧10。 希望這將是罰款。 它編譯? 是。 現在我們有一個觀點。 我們有一個輸出。 讓我們只看看會發生什麼。 這走了。 這是回來了。 所以在這裡我們已經指定 什麼樣的功能 將被調用時, 我們在什麼類型, 當我們按下特定的按鈕。 這基本上是 目標的行動計劃 事件驅動 在Objective C.編程 除此之外, 這是不是很令人興奮 因為我們無法真正改變 有多高的金字塔會, 所以我們可能需要以某種方式 獲取來自用戶的輸入 和改變的高度 金字塔的基礎上,他們的輸出。 所以,我們要做到這一點。 所以,當我們稱之為runMario這個時候, 我們不只是直接調用馬里奧。 這一次的冠軍。 委託。 這是很有趣的。 什麼是代表? 我打算把自這裡。 我們將看到 什麼較晚。 所以在這裡我們已經基本建立了一個 具體的實例調用一個UI警報 視圖。 一個UI警報視圖是 基本上你會是什麼 每次看到一些持久性有機污染物 並要求您輸入, 就像當你想會發生什麼 購買的東西上的應用程序商店。 除此之外,在你 創建它,我們只是展示了警報。 好吧,就讓我們快 測試將這項工作與否。 這是非常酷的。 現在,讓我們實際創建 輸入字段的UI警報。 這是我們如何做到這一點。 我們應該有一個 為警報輸入視圖。 非常酷。 遠的不說,10。 它沒有做任何事情的權利 因為現在實際上是調用 並沒有改變執行馬里奧。 所以這已成為一個小 有點不可思議,因為每當 我們按一個按鈕,每當我們 在警報視圖按下一個按鈕, 事情應該發生, 但它並沒有發生。 我們如何趕上? 我們怎麼知道用戶 已經駁回了警報視圖 並且已經進入了一個號碼,因為 現在什麼也沒有實際發生。 嗯,你可能已經猜到了 它的權利,代表團一行。 因此,除了所有 這些聲明, 我們需要添加一個新的代表團 它所謂的UI警報視圖委託。 讓每一個 互動或事件 那我們將有 與UI警報視圖 將要被處理的 通過我們的類為好。 因此除了是,將 在索引警報視圖點擊按鈕。 此為止。 因此,在這種情況下,我們有 already--所以我們有 發現了一個協議, 將處理該事件時, 我們點擊完成按鈕 在警報視圖。 所以每次我們解散 警報看來,這應該發生。 讓我很快測試。 好吧的確,我們在這裡達到了。 所以在這裡,我們將不會有什麼 實際上得到的是實際 得到the--所以我們想出去 我們有以前的文字 在警報視圖輸入。 而基於文本,我們 要顯示馬里奧。 這很快證明 如果實際工作與否。 因此,在這種情況下,如果我們的輸入, 比方說,10日,我們應該看到10。 非常好,我們在這裡做的有很多。 這是相當不錯的。 現在的最後一步將be--所以 最後一步,我們需要做的事情 只是一個叫馬里奧 級別基於輸入 我們已經投入警報視圖。 因此,我們需要轉換 這串入的iOS。 靜溢很真棒。 然後我們只需調用自 marioWithLevels值。 讓我們來看看這會 實際工作或沒有。 我們已經給出一個金字塔。 讓我們試著改變高度。 實際工作。 這實在是太酷了。 所以,現在你可以 輸入你想要的任何值。 遠的不說,四名。 這是相當真棒。 所以這基本上是 一個真正簡單的例子 對於如何在S碼項目 而如何真正快速連線了 一些很簡單的活動和功能。 因此源會 可後來在網上放。 所以,如果你有興趣 在iOS的馬里奧是如何工作的, 我打算把一模一樣的 項目到CS50網站後。 我們基本上用做 夏天到了,才完成 我只是想你點傢伙 一些真正真棒資源 可在網上。 顯然,蘋果公司文檔 將是非常有益的。 但除此之外,我特別 推薦四個來源,學校代碼, 樹屋,AppCoda和WWDC視頻。 代碼學校,樹屋是 兩個在線育人的網站, 其中特別關注 軟件工程。 特別是對學校的代碼,他們 對iOS的真正的好教程。 這是一個非常簡單的例子吧。 他們實際上創造一個真正cute-- 看看這個小可愛iPhone 花花公子那邊,這是相當真棒。 和他們的方式解釋目的 C語法是完全清楚的。 樹屋是一樣的。 和AppCoda是一個論壇。 它實際上是運行一個博客 一個真正有經驗目標C 程序員。 而在AppCoda所有這些教程 很短,很容易實現, 強烈推薦。 如果你是一名開發人員, 肯定是去檢查 在那裡你可以如何WWDC視頻 了解最新的iOS編程 技術,API和庫。 所以這是一個很值得 它的研討會。 太謝謝你了。 我希望你玩得開心 創建自己的iOS應用。