>> 天宇刘：哎，怎么是 它会大家？
这是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应用。