Tag: 斯威夫特

带有蒸气2的服务器端Swift(第1部分)

在2015年Swift开源之前,我曾尝试用Node.js编写一个简单的RESTful API服务器。 但是,由于我对Javascript语法和后端开发不熟悉,所以没有足够的时间来深入研究。 如今,有几种不同的服务器端Swift框架,例如Vapor,Perfect和Kitura。 作为iOS开发人员,这是拓展后端开发视野的好机会。 根据其GitHub页面,Vapor是Swift最常用的Web框架。 它为您的下一个网站,API或云项目提供了精美而易用的基础。 更重要的是,raywenderlich.com网站上有一系列免费教程。 这些教程为我提供了如何使用Vapor构建API服务器的基本概念,即使它们是在先前版本中完成的。 谢谢雷! 在本文中,我将演示一个简单的RESTful API服务器,该服务器将处理三种模型: Lesson , Teacher和Student 。 基本上,我们需要以下端点: /{models} :通过GET请求获取所有模型对象,或者通过带有JSON正文的POST请求创建新的模型对象。 (只需将{models}替换为课程,教师和学生。) /{models}/id :通过GET请求获取特定的模型对象,通过DELETE请求删除一个模型对象,或通过带有JSON正文的PATCH请求更新现有模型对象。 在我们开始编码之前,有几种必要的配置。 首先,按照Vapor网站上的说明正确安装Vapor,然后使用vapor new your_project_name –template=api创建一个新项目。 其次,在该项目中,我选择使用PostgreSQL作为数据库服务器,因此有必要在Macbook上安装PostgreSQL,并将蒸气的PostgreSQL提供程序添加到我的项目依赖项中。 启动PostgreSQL服务器后,按如下所示打开并修改Package.swift文件。 let package = Package( // … dependencies: [ .Package(url: “https://github.com/vapor/vapor.git”, majorVersion: 2), .Package(url: “https://github.com/vapor-community/postgresql-provider.git”, majorVersion: 2) ], // … ) 然后,在目录Config/secrets下创建一个名为postgresql.json的新文件,并将以下代码片段添加到postgresql.json文件中。 { “hostname”: your_host_address, “user”: your_username, […]

版本号

我已经发布了版本。 实际版本对象在您必须解析一个对象时必不可少。 我的意思是,这通常足够了,您制作的每个应用程序的Info.plist都有一个。 我已经使用了Swift软件包管理器一部分的Version.swift多年了,这个库是对代码进行提取,记录,测试和增强的代码。 相对于原始实现,它具有: 更紧凑的可Codable实现† 它实现LosslessStringConvertible ‡ 不是大规模单一源文件(MSSF) 有在线文档(已记录100%) Bundle和ProcessInfo扩展 删除可能致命的ExpressibleByStringLiteral一致性 用户输入(如10.0或3 “宽容”初始化程序 Range惯用实现 99%的代码覆盖率 我可以自己发布它,部分原因是因为我在Apple wrote时编写了原始实现。 而且我保留了许可证。 版本库具有Equatable , Comparable , Hashable , Codable和Range 。 它完全符合语义版本RFC,其中包括对预发行标识符和构建标识符的支持, 并且我们知道如何正确地对它们进行排序和比较(2.0.0-alpha 小于 2.0.0和1.0.0 … <2.0。 0不包含它)。 嘿! 我是Max Howell,我每天都写开源。 我从事开源工作已有15年了,您可能已经使用过其中的一部分(有人自制吗?)。 但是,我需要您的帮助,目前我的收入低于最低工资。 不要让我需要再次申请Google! https://patreon.com/mxcl

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的事物。 […]