【编者按】本篇文章做者是Reinder de Vries,既是一名企业家,也是优秀的程序员,发表多篇应用程序的博客。本篇文章中,做者主要介绍了如何基于Parse特色,打造一款相似Instagram的应用,完整而清晰的步骤,为开发者提供一次绝佳的学习体验。本文系 OneAPM 工程师编译整理。html
Parse 是一个移动应用开发平台,旗下有个颇有意思的产品:Parse Core。它的特点之一是容许应用开发者直接将数据存储在云端,而无需担忧设置服务器或从新设计一个 REST API。Parse Core 是本地备份(好比核心数据),这使得它能轻松解决线上线下等后端问题。程序员
本篇教程主要介绍如何建立一个基于 Parse 的应用。咱们将打造一个相似 Instagram 的应用,它包括如下特征:objective-c
这款应用将彻底使用 Swift 语言开发,Swift 是苹果最新的编程语言,用于打造 iOS 应用。Parse 并不用彻底重写 Swift,因此咱们须要建立一个桥接头来处理它俩的兼容性。shell
经过这篇文章你将学到如下技能:数据库
- 用 Parse 实现检索,存储数据到云端;
- Cocoapods 整合一个调用 Objective-C 框架的 Swfit 程序;
- 创建视图和有接口的自定义表视图单元;
- 从零开始,用 Swift 编写一个完整的 App;
- 使用自动布局和约束;
- 使用手势识别、可选类型、条件、闭包、属性、出口和动做。
首先,你得有一个 Parse 账户。这能够经过你的 Facebook、Google+、GitHub 账号或邮件在 Parse.com 注册。
而后,登陆 Parse,经过 https://www.parse.com/apps 能够到你的 apps Dashboard。编程
经过点击「建立新应用」 按钮,建立一个新的应用程序,输入「Paws」做为应用名。接着,打开新应用,确保你能看到下图的的核心选项卡。json
从技术上说,Parse 只是在线数据库。数据被存储为具备一个名称和多个字段的对象,如电子表格。这样的对象被称为一个类,它的功能是数据结构的蓝图。咱们将要使用的类名为 Cat。swift
在核心选项卡单击该按钮添加一个类。在下拉框中选择自定义,而后键入类的名称:Cat。而后,单击建立类。后端
这样,咱们就建立了新的类,接着咱们还能够添加一系列的标准字段,如 ObjectId、createdAt、updatedat和ACL。xcode
将+Col
按钮翻到最上,添加下列字段,名称和类型:
这些字段将为 Cat 数据库提供基本信息。
如今咱们已经设置好基础结构,能够导入数据了!将该文件保存到:cat.json。
而后,回到核心选项卡和数据库,左键点击「导入」按钮。选中你刚保存的文件并上传。确保类别集是「自定义」 ,并重命名为 Cat(而不是rs1_cat)。再单击「完成导入」。若是导入是完整的,Parse 会及时提示。点击「Got it」并从新加载页面。
若是一切顺利,你如今应该能看到数据库中有10个 Cat。它们都有一个名字、一个 URL、一些得票数和一些为原则这预留的空间。
至此,咱们在 Parse 中的所有工做已经完成。下面开始构建 Swift Xcode 程序。
打开 Xcode 并建立一个新项目,从开始界面选择「菜单→新建→工程」。
选择类别「iOS→应用模板」的单一视图的应用。在下一屏上输入如下字段:
单击「下一步」 ,选择工程目录文件夹,再单击「建立」 。
咱们不打算使用 Storyboards,因此单击左上的 Paws、2 targets、 iOS SDK,打开工程设置。在左侧的列表中单击 Target 下方的 Paws,而后找到屏幕中主区域的主界面设置。将 textMain 从框中移除。
在程序代码中使用 Parse 以前,咱们必须将其添加依赖关系。所以咱们选择 Cocoapods,它是一个软件包管理器。许多应用项目依赖于第三方库,好比 Parse。CocoaPods 是方便加载库的工具,并确保其实时更新。
在终端执行如下命令安装 Cocoapods。它会要求你输入你的 Mac 用户密码。但不容许包含「$」符号。这标志意味着 shell 命令!
$ sudo gem install cocoapods
中途若是一两分钟没有进展也无需担忧,那是由于 Cocoapods 正在安装中。安装完成后你能够看到一堆线条,最终...安装完成。
接下来,在 Xcode 项目的根目录下建立一个空文件,并调用 Podfile 文件。用你喜欢的文本编辑器打开,并粘贴下面代码到该文件:
pod ‘Parse’, ‘~> 1.7.1′ pod ‘ParseUI’, ‘~> 1.1.3′
Podfile 会告知 Cocoapods 哪些库是咱们须要的。这样的话,Parse 的版本是1.7.1,而ParseUI版本是1.1.3。
如今,关闭 Xcode,并使用终端找到程序项目的根目录。写入终端 cd,而后在 Paws 目录中查找,并将其拖至终端。
接下来,在命令行输入如下代码:
$ pod install
CocoaPods 会查找 Podfile,并尝试安装咱们设置的依赖关系。这个步骤大概会花上几分钟。结果应该是这样:
CocoaPods 已经下载并编译 Parse,并把它添加到一个新的工做区。从如今开始,咱们再也不使用原来的应用项目,而会使用 CocoaPods 建立的工做区。它包含了咱们的原始项目和 CocoaPods 项目。
这里要注意的是:经过搜索浏览找到程序的根目录,打开 Xcode 中的新工做区,再打开其中的 Paws.xcworkspace。验证下左侧的导航项目,会看到:Pods 和 Paws。
在咱们直接编写应用前,须要创建 Parse 和项目之间的链接。Parse 是用 Objective-C 搭建的,而咱们的项目则是用 Swift 语言,二者之间须要适当的设置才能兼容。
任何 Objective-C 库、项目或类均可以经过设置桥接头才能与 Swift 兼容。从技术上讲,这样的桥接将 Objective-C 的头文件转换成 Swift 语言。
建立一个桥接头须要执行如下操做:
1.在 Paws 目录添加一个新文件,选择 Paws 工程下的 Paws 目录,单击右键,而后单击「新建文件」。
2.从「iOS→源」类别中选择Objective-C文件模板并单击「下一步」。
3.将类命名为「Paws」(或其它你喜欢的名字),而后继续进行并保存文件。出现提示时,单击「是」来配置 Objective-C 桥接头。
Xcode 建立两个新文件:Paws.m 和 Paws-Bridging-Header.h。Paws.m 文件没什么用,你能够直接将它删除。在 Paws-Bridging-Header.h 文件中写入如下代码:
#import <Parse/Parse.h> #import <ParseUI/ParseUI.h> #import <Bolts/Bolts.h>
看到这里,你不由会问难道这一大堆工做只是为了创建一个编程项目么?别担忧,咱们接下来就来搞点有趣的。请记住:Parse 提供一个现成的在线后端,能节省大量时间!
经过 https://parse.com/apps,返回 Parse 的 Dashboard。将鼠标悬停在你账户名的右上角,单击账户,再单击应用键标签最上面一栏。你还能够直接访问 https://parse.com/account/keys。
肯定应用的 Parse 网络服务后,该页面将显示你的应用键。应用键由一串字母数字或字符组成,基本上这就是应用的密码,要注意保密。
接下来,在 Xcode 中打开文件 AppDelegate.swift。找到应用程序的 didFinishLaunchingWithOptions 方法。
添加如下代码到方法中,确保它在该方法的首行。完整的是这样:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { Parse.setApplicationId("...", clientKey: "...") return true }
用 Parse 的应用键分别替换「...」
以后,尝试运行应用程序:
1.确保选择正确的设备,经过确认PLAY
按钮的右上方,确保设备选择,好比 iPhone 或 iPhone6。
2.而后,点击Play
按钮或按下 Command-R 运行程序。
项目在构造、运行过程当中没有错误。一旦运行,你能够看到 iPhone 会出现有一个黑色的窗口,但窗口上却什么都没有——这是由于咱们移除了主页面脚本,尚未替换。
值得高兴的是:你已经成功用 Parse 和 CocoaPods 配置好你的项目了!
为了显示出 Paws 应用中的 Cat 图片,咱们须要使用一个表视图控制器。这是很是常见的 iOS 接口元件,能在垂直列表中展现各行数据。显而易见的例子就是 iPhone 上的联系人应用中人和号码的垂直列表。在 Objective-C 和 Swift 中,一个表视图控制器自己就是 UITableViewController 类。
注:陌生的术语类?把它看成原型,也就是你在铁铸件时用的模具。你把铁倒入模具,就出来一个副本。这种复制被称做该类的一个实例。
Parse 有个很棒的对应叫 ParseUI,是 UI 元素集合,能与 Parse 产品紧密结合。咱们即将使用 PFQueryTableViewController 类。它用 Parse 数据扩展 UITableViewController 类的功能。这简直是完美的结合。
建立一个名为 catstableviewcontroller 的 Swift 新类。在项目浏览器中,右键单击 Paws 目录并选择新文件。从「iOS→源」,选择 Cocoa Touch 类模板。输入如下设置:
保存文件到 Paws 目录。选择目录时,请确保 Paws 做为目标被选中。
打开新类文件,能够看到的基本结构:一个名为 viewDidLoad;另外一个名为 didReceiveMemoryWarning。须要注意的是,CatsTableViewController 扩展 PFQueryTableViewController,是它的子类。反过来,PFQueryTableViewController 类是 UITableViewController 的扩展,因此咱们的表视图控制器将继承全部表视图功能,同时可用 ParseUI 添加代码和功能。
首先,咱们必须重写类的构造方法来配置基础设置。
将如下两种方法添加到类的顶部,在文件的第一个大括号以后:
override init(style: UITableViewStyle, className: String!) { super.init(style: style, className: className) self.pullToRefreshEnabled = true self.paginationEnabled = false self.objectsPerPage = 25 self.parseClassName = className } required init(coder aDecoder:NSCoder) { fatalError("NSCoding not supported") }
你刚添加了两个方法:
在最初的初始化中,完成了下列事项:
1.当 super.init()调用时,初始化父类 PFQueryTableViewController,从而完成自身初始化。
2.接着,pullToRefreshEnabled 设置为 true,继承 PFQueryTableViewController 类。特殊变量 self 指当前做用域,为该类的实例。
3.随后,咱们禁用分页,并设置表对象的最大数目为25。
4.最后,在实例属性 parseClassName 中存储参数 className。
以后,当咱们建立 CatsTableViewController 类的实例,这个构造(或指定初始化)将是表示图控制器被调用和设置的基础。
经过 PFQueryTableViewController 实现 Parse 表视图的核心是方法 queryForTable。咱们继承该方法时,继承的其实是 PFQueryTableViewController,因此须要对其进行重写:须要链接表视图控制器到 Parse 数据存储区时,PFQueryTableViewController 会调用它。它从表中查询数据,所以该方法名为 queryForTable。在该方法中,咱们能够自定义检索。
添加此方法到 CatsTableViewController 类(在 viewDidLoad 方法下)。注意这些括号匹配!
override func queryForTable() -> PFQuery { var query:PFQuery = PFQuery(className:self.parseClassName!) if(objects?.count == 0) { query.cachePolicy = PFCachePolicy.CacheThenNetwork } query.orderByAscending("name") return query }
来看看这个新方法:
override func queryForTable() -> PFQuery
其中包含了什么?编写新方法 queryForTable,告知编译器如下事项:
1.用相同的名字覆盖父类方法(识别标志),使用语句覆盖。
用 func 和名字声明该方法,queryfortable。
2.声明 methsignatureod 之间的参数。本例中没有参数。
3.最后选择「Write→ PFQuery」,返回方法类型。
在方法内发生了下列变化:
1.声明一个新变量调用查询,须要一个命名参数的类名,用于实例化构造函数的方法,被分配的 self.parseclassname 值。换句话说,表的类名是 Cat,利用 Cat 实例建立查询。
2.而后,若是查询是空,在查询中设置 CachePolicy 属性。它的值是连续的 PFCachePolicy.CacheThenNetwork,这意味着该查询,首先在脱机缓存中寻找对象,若是没有找到,它会从在线 Parse 数据存储中下载对象。当表视图终于显示在应用界面上,这时 if 语句便成功执行。
3.而后,咱们以「名称」列为查询对象。
最后,返回查询结果。(未完待续...)
敬请持续关注:《如何用 Parse 和 Swift 搭建一个像 Instagram 那样的应用》系列(2)(3).
原文地址:Building an Instagram-Like App with Parse and Swift
本文由OneAPM工程师编译 ,想阅读更多技术文章,请访问OneAPM官方技术博客。