>> 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应用程序。
所以这是X​​code的。
如果你还没有看到它，它 可以是一个有点吓人在第一。
有很多窗格，有一个 很多在各个领域的装饰物。
但是，仅仅认识到有 真的几种主要成分
这一开发环境。
最左边是所有的文件 这适用于你的程序
或您的特定项目。
我们将围绕点击 对他们中的一些，我们将
指出最 重要的一段时间。
最右边，我们 有一组属性。
而所有这些属性中，有 各种窗格的属性。
窗格会根据变化 的主要内容的范围内，这
恰好是在中间。
现在，中间可以实际显示 你各种各样的事情，例如
你的代码本身。
或者你可能实际上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。
然后我需要 检查，看它是否存在。
>> 这样我就可以使用，如果让 成功等于解析，
后来我知道，那可选 实际上包含了一些数据。
或者是我在这里做是为了 只是假设，如果有
没有错误，它实际上是安全的。
好吧，我要感谢 大家的光临。
我知道这是很多， 但它只有一个小时
谈一些 很先进的东西。
所以希望你会得到一个 机会来下载所有的代码
并采取更好，更 深入了解一下吧。
排序说服所有的自己 的东西，是怎么回事。
我要感谢你 所有的再次光临。
祝你好运与您的最终项目。
祝你有美好的一天。