天宇刘:哎,怎么是 它会大家? 这是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应用。