Tag: 斯坦福

CS193P:使用Swift Lecture 2 Notes开发iOS应用程序

什么是MVC? MVC基本上不适合我们将应用程序分为3个不同的阵营,即Model,View和Controller 。 该模型与您的应用程序做什么有关。 它与应用程序的显示或在屏幕上绘制的方式无关。 对于计算器应用程序, 模型可能是进行计算的部分。 控制器与模型的显示方式或在屏幕上的显示方式有关(UI逻辑)。 视图是您的控制器的奴才。 这些是Controller用来在屏幕上放置诸如按钮,标签,表格等之类的东西以显示Model中的内容以及从用户那里获取输入以更新Model的东西。 知道如何将代码分为这三个阵营是一回事,但难题的关键在于它们之间的通信。 也就是说,什么是允许的,什么是不允许的。 Controller必须完全控制Model ,并且可以随时与它对话。 它需要完全访问权限,因为它的工作实际上是向用户展示此模型中的内容,并根据用户输入来更新模型。 Controller需要能够使用其奴才,但是它想显示Model 。 在大多数情况下, 控制器和视图之间的连接是通过插座进行的 。 在Xcode中,它显示为@IBOutlet 。 例如,我们在计算器中用于显示的标签是控制器用来显示Model中执行的数字和计算结果的插座。 该模型是独立于UI的,而View是完全UI的。 他们绝对不应该互相交谈。 视图可以与控制器对话吗? 是的,没有。 View的问题在于其中的所有奴才都有通用对象,例如UIButton和UILabel 。 它们是由Apple几年前创建的,对您正在构建的应用程序(在本例中为计算器)一无所知。 但是,有时需要将UI中的更改传达给Controller 。 然后, View与Controller的通信方式必须“盲目”和“结构化”。 沟通是盲目的 ,因为视图中的对象不知道它们正在与哪些类进行交谈。 例如,按钮对CalculatorViewController一无所知。 之所以构成这种通信,是因为由于不了解对象的两端,因此它们必须以定义良好的预定义方式进行通信。 视图可以与Controller进行通信的结构化方式有哪些? Target-Action:这非常简单,因为Controller可以通过定义方法将目标挂起。 @IBAction。 然后,当View要与Controller对话时, View会调用此方法。 制作touchDigit函数时,我们在计算器应用程序中使用了“ 目标:操作 ”通信方式,因为我们希望按下按钮以调用计算器中的方法并告诉我们按下了哪个按钮。 有时, 视图需要传达比“被感动”更复杂的东西。 例如,作为通用View仆从的ScrollView可能需要告诉Controller某人开始滚动,或指示某人放大了特定的缩放比例。 也就是说,它想通知控制器,因为控制器可能希望对此做出反应。 放大或缩小时, 模型可能会更改。 此外,也许ScrollView需要确保做某事是否可以。 可能需要问控制器一个问题:“我现在应该允许垂直滚动吗?”。 我们有很多消息涉及到诸如Mins […]

CS193P:使用Swift讲座1注释开发iOS 10应用

这些基本上是我本次iOS课程的笔记。 从许多方面来说,笔记都是教授所说的逐字记录。 讲义幻灯片也是iTunes U上该课程的资料部分中提供的那些幻灯片。这些注释确实对我有用,但对其他参加该课程并且希望有一种方法来刷新自己对本教程中发生的事情的人可能有用。讲课而不必重新观看讲课,或作为对讲课的补充。 我将在各个领域添加自己的意见,并提供示例或其他见解,以进一步理解课堂上讲授的概念。 我希望这些说明不仅对我有帮助,对其他有志成为优秀iOS开发人员的人也有帮助! 该课程确实有一些前提条件,可以满足这些前提条件。 主要的是在面向对象编程 (OOP)方面的经验。 满足要求的相关斯坦福课程为CS106A&B , CS107 , CS108或CS110 。这是斯坦福大学的高级CS课程。 我本人并不满足所有先决条件,但不会因此而阻止我追求目标。 可以将它们视为四层,其中最底层靠近硬件,而最顶层靠近用户。 核心操作系统在硬件附近,而可可触摸在用户附近。 iPhone正在运行UNIX ,因此它具有完整的多任务处理和文件系统。 构建应用程序时,您可以使用所有这些功能。 特定于移动设备的是Power Management和Keychain Access之类的东西(以确保人们不会访问他们不应该访问的东西。)这些API几乎都是用C编写的,我们将不在这一层做任何工作。 UNIX上的面向对象层是 核心服务层,因此我们可以使用Networking , Multithreading或Preferences和SQL数据库。 此层中没有用户界面 (UI)。 该层称为基础。 具有讽刺意味的是,这个(多媒体)层非常重要,我们不会花太多时间。 该层包括视频,各种不同的音频框架,静态图片(如JPEG),用于2D绘图的Quartz API,用于3D绘图的OpenGL等。 在顶层,我们将花费大部分时间在此处,这是Cocoa Touch 。 它是用于构建用户界面的面向对象的API。 这些用户界面不仅限于屏幕上的按钮和滑块。 例如,它们包括摇动手机时的操作以及使用手机的方向作为输入。 它还包括动画。 我们没有时间来遍历该层中的所有对象,但是我们的想法是,我们了解的一些对象将具有使用它们的范例,这些范例可以应用于我们不熟悉的对象。 我们所做的一切都将在Xcode 8(或更高版本)中进行,我们将使用相对较新的编程语言Swift来完成所有工作。 与框架同样重要的是一种称为Model-View-Controller(MVC)的设计策略或方法。 Model-View-Controller是一种将面向对象应用程序中的所有类划分为三个不同组的方法。 Model组是我们程序执行的,独立于UI。 对于计算器,这将是所有的计算。 如何添加,划分,平方根等。 视图是用户与之交互的用户界面。 它通常由通用用户界面元素(如按钮和滑块)制成。 对于计算器,这将是按钮和显示。 控制器是模型和视图之间的粘合剂 。 它是侦听UI中发生的事情,做出决策,更新模型或由于模型中的某些更改而更新UI的事物。 […]