首页 > 学院 > 开发设计 > 正文

使用 Realm 和 Swift 创建 ToDo 应用

2019-11-09 17:54:45
字体:
来源:转载
供稿:网友

本文转载于SwiftGG 智能手机的快速发展的同时,涌现出了很多对开发者友好的开发工具。这些工具不仅使得开发变得更加简单和容易,同时也保证了性能和产品质量。如今想要在 App Store 中占据一席之地,并非易事。而且想要使得应用易于扩展就更加困难了。当你成功获得百万量级的用户时,应用中的每一个细节都不能放过,并且需要在很短的时间完成对细节的打磨。所以和数据库打交道,是很多开发者都会面临的一个问题。相信我们每个人都会因为数据库引起的各种问题而头疼不已,对于数据库,我想如今我们只有两种选择:SQLite 和 Core Data。我是 Core Data 的忠实粉丝,它对记录(records)的处理和持久化数据的能力非常强大,但是我意识到,在开发应用的过程中,我在 Core Data 上浪费了太多的时间。最近,我无意中发现了 Realm,一个可以替代 SQLite 和 Core Data 的更好的解决方案。

Realm 是什么?


Realm 是一个跨平台的移动终端数据库,支持 iOS(Swift 和 Objective-C 语言都支持)和 Android。Realm 的目的就是提供比 SQLite 和 Core Data 更好更快的数据库支持。它不仅仅是更好和更快,而且更加易于使用,短短几行代码就可以完成很多操作。Realm 完全免费,你可以随意使用它。Realm 是为移动设备而生的,因为在过去的十年中,移动终端的数据库技术没有任何的革新。现在如果和移动终端的数据库打交道,你只有一种选择,使用 SQLite 或者是底层封装了 SQLite 的技术比如 Core Data。Realm 的目的是更加易用,它并不是一个建立在 SQLite 之上的 ORM,而是一个基于自己的持久化引擎,简单并且快速的面向对象移动数据库。 这里写图片描述

为什么选择 Realm?


Realm拥有令人难以置信的速度并且使用起来非常简单,你会发现,无论是想完成数据库的读还是写操作,都只需要短短的几行代码。下面我会列出它的所有优势,并说明为什么 Realm 是你在移动应用上数据库的不二选择:

安装简单:在下一个章节 — 如何使用 Realm 中你会了解到,安装 Realm 会比你想象的更为简单。使用简单的 Cocoapods 命令,你就可以完成所有的安装工作。

速度更快:使用 Realm 库操作数据库的速度非常快。它比 SQLite 和 CoreData 都更加快速,这里有它们之间的比较指标作为证据。

跨平台:Realm 的数据库文件是跨平台的,可以在 iOS 和 Android 间共享。无论你是使用 java、Objective-C 或者 Swift,都可以使用相同的抽象模型访问。

易于扩展:如果你的移动应用需要处理大量的用户数据记录,数据库的可扩展性就显得十分重要。在开始着手开发应用之前,这一点就应该被考虑在内。Realm 提供很好的可扩展性,在操作大量的数据时,速度也非常之快。选择使用 Realm 可以为你的应用带来更快的速度和更加流畅的用户体验。

规范的文档和很好的支持:Realm 提供了丰富的大量条理清晰、易于阅读的文档。如果你有任何的问题,你也可以通过 Twitter、Github 或 Stackoverflow 来获得帮助。

可信任:Realm 已经被大量的初创公司和大公司用于它们的移动应用中,像 Pinterest、Dubsmash 和 Hipmunk。

免费:除了以上这些极好的优点以外,它还是完!全!免!费!的!

让我们开始动手吧


让我们开始学习 Realm,使用它来构建一个简单的使用 Swift 语言的 iPhone 应用。所完成的 demo 程序是一个简单的 Todo 应用。用户可以增加任务清单,每个任务清单都能够包含多个任务。任务拥有名称、备注、到期日期,可以添加图片,并且拥有一个布尔值来表示该任务是否已经完成。在开始创建 Xcode 项目之前,我们需要先配置好 Xcode,安装使用 Realm 所需的工具。

环境要求


请注意需要满足下列要求

iOS 8 及更高的版本,OS X 10.9 及更高的版本

Xcode 6.3 及更高版本

Realm 有两个发行版,一个针对 Swift 2.0,另一个针对 Swift 1.2。我们推荐您使用 Swift 2.0 的版本。当然你也可以使用针对 Swift 1.2 的版本,但是以后这个版本 Realm 不会再进行更新支持,所以为了保险起见,使用 Swift 2.0 对应的版本,是个更好的选择。

配置 Xcode 和所需的工具


在开始配置 Xcode 项目之前,请确保运行环境已经正确安装了 CocoaPods,我们将使用它来为项目安装 Realm。如果对 CocoaPods 不熟悉,你可以查看在线的教程,这些教程的材料足够让你明白如何开始使用它。

现在,使用 Single View application 项目模板创建一个 Xcode 工程,命名为 RealmTasks 或者其他你喜欢的名字。请确保选择 Swift 作为开发语言。之后在终端中进入到该工程目录,使用如下命令来初始化 CocoaPods:

pod init

然后使用 Xcode 打开生成的 Podfile 文件,在 target 之后,添加 pod 'RealmSwift',修改完之后,应该是下面这个样子: 这里写图片描述

下面运行 pod install 命令来把 Realm 下载安装到项目中。完成之后,你会在你的工程文件目录发现一个新生成的 Xcode 工作空间。请确保打开 RealmTasks.xcworkspace 而不是 xcodePRoj。打开工作空间后,你会看到像下面这样的情形: 这里写图片描述

现在就可以在 Xcode 中使用 Realm 啦,但是我们将安装下面的小工具来让使用 Realm 的过程更加容易。

在 Xcode 中安装 Realm 插件


Realm 开发团队提供了一个生成 Realm 模型非常有用的插件。为了安装这个插件,我们要使用 Alcatraz。如果你不知道 Alcatraz 是什么的话,这里解释一下,它是一个简单有用的开源包管理工具,它可以让你无需任何配置,自动地为 Xcode 安装插件、文件模板和颜色主题。为了安装 Alcatraz,你只需将以下代码复制到终端中执行,之后重启 Xcode:

curl -fsSL https://raw.githubusercontent.com/supermarin/Alcatraz/master/Scripts/install.sh | sh

然后在 Xcode 中,选择 Window -> Package Manager,如下图: 这里写图片描述

然后在弹出的窗口中,你可以选择安装你喜欢的插件或者文件模板,在搜索框中你可以搜索你喜欢的插件、配色。在搜索框输入「Realm」,在出现的结果中选择「RealmPlugin」,点击 Install 按钮 这里写图片描述

Realm 浏览器


给大家介绍的最后一个工具是 Realm 浏览器。这个浏览器可以帮助你阅读和编辑你的 .realm 数据库文件。这些文件在应用程序中被创建,在数据库表中保存了所有的数据实体(entities)、属性(attributes)和记录(records)。之前我们说过,这些数据库文件可以在像 iOS 和 Android 这样不同的平台间共享。想要下载最新版本的 Realm 浏览器,请访问 iTunes store。打开 Realm 浏览器,选择 Tools -> Generate demo database。它会帮你生成 realm 数据库测试文件,你可以使用该浏览器打开和编辑它的内容。当你打开的时候,你会看到像下面的内容: 这里写图片描述 正如你所见,在 RealmTestClass1 中,它拥有 1000 条记录,显示了多种不同的参数类型(即「列」)。我们会在下节介绍支持的属性类型。

现在,Realm 的所有准备工作都已就绪,那我们开始动手吧!

数据模型类


好戏才刚刚开始。首先我们来创建模型类或者说我们的数据库。为了创建 Realm 数据模型类,你只需要简单地新建一个普通的 Swift 类继承自 Object 就可以了。因为 Realm 数据模型类的基类是 Object,所以 Object 的子类都可以扩展为 Realm 的模型类。一旦创建类后,就可以添加属性了。Realm 支持以下多种数据类型:

– Int,Int8,Int16,Int32 和 Int64 – Boolean – Float – String – NSDate – NSData – 继承自 Object 的类 => 作为一对一关系(Used for One-to-one relations) – List => 作为一对多关系(Used for one-to-many relations)

Realm 中的 List 可以包含多个 Object 实例,参考上面 demo 数据库的截图,最后一列表示在其他数据表中的存在的一组引用。在和 Realm 模型类打交道的时候,使用的方式和其他 Swift 类一样。例如,你可以添加方法或者遵循指定的协议。

多说无益,来看代码 ��

现在让我们使用之前在 Xcode 中安装的 Realm 插件来新建一个 Realm 类。打开 Xcode,新建文件,在右边的侧边栏选择 Realm: 这里写图片描述


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表