Realm 浅谈Swift版
首先先附上Realm swift中文文档地址:https://realm.io/cn/docs/swift/latest/ 内容十分详细,当然这都是基础用法,更高级的用法还是参考官方例子吧。接下来看看我在此次项目当中比较初级的用法吧,更高级的待以后再补充。
Realm 安装
1. 手动拖入工程
- 下载最新的 realm
- 从
iOS/static/
目录中,把RealmSwift.framework
文件拖动到你的Xcode工程的General
deEmbedded Binaries
里。确保Copy items into destination grops's folder
已经被选中,点击完成
2. 通过cocoapods的方式
如果没有安装cocoapods还需要先安装,先简单介绍其安装方式
Cocoapods安装方式有两种可以通过官网下载.app
进行安装。不过我个人比较喜欢命令行安装(需要依赖ruby环境,Mac已经搭建好了ruby环境)
$ sudo gem install cocoapods
可能你在上述安装过程中会失败,那可能是因为网络原因,现在我们来替换一下ruby镜像
// 删除原有的镜像源
$ gem sources --remove https://rubygems.org/
// 添加国内最新的镜像源(因为之前淘宝的那个好像不更新了)
$ gem source -a https://gems.ruby-china.org/
// 接着执行
$ gem sources -l
// 如果出现
> *** CURRENT SOURCES ***
>
> https://gems.ruby-china.org/
// 说明成功了,现在再来执行安装即可
$ sudo gem install cocoapods
好了,现在我们开始安装RealmSwift
- pod init
- vi Podfile
- pod 'RealmSwift'
- pod install
2.Xcode 插件
我们的Xcode插件让新建Realm模型model
很轻松。安装Realm Xcode插件的最简单的途径就是通过Alcatraz在RealmPlugin
目录下。
你也可以自行手动安装:打开release zip
中的plugin/RealmPlugin.xcodeproj
, 点击编译build
, 重启Xcode生效。
如果你使用Xcode新建文件File > New > File… — or ⌘ N
,可以看到有一个新建Realm模型create a new realm model
的选项。
3. Realm 浏览器数据库管理器
先说一下Realm Browser
这个数据库查看工具的使用方法
1. 模拟器调试
- 如果是使用模拟器进行调试,首先应该打印出
Realm
数据库地址
let realm = try! Realm()
print(realm.configuration.fileURL!)
- 然后跳转到对应的路径下,用
Realm Browser
打开对应的.realm
文件就可以看到数据了
4. 数据库的使用
1. 创建数据模型
以项目中为例,存储搜索记录。
import Foundation
import RealmSwift
class SearchHisModel: Object {
dynamic var searchT = ""
dynamic var searchType: Int = 0
dynamic var searchDate = Date()
}
2. 创建数据模型对象
1. let model = SearchHisModel(value: [searchBar.text!,isNotHomeComing == 1 ? 0 : 1, Date()])
2. let model = SearchHisModel()
model.searchT = searchBar.text!
model.searchType = isNotHomeComing == 1 ? 0 : 1
model.searchDate = Date()
3. 数据库操作(增删改查)
任何时候都需要获取Realm实例,每个线程只需要使用一次即可。
let rel = try! Realm()
查询数据
- 普通查询
let lists = rel.object(SearchModel.self)
- 逐渐查询:根据逐渐查询某张表的某条数据,模型必须包含主键,否则会崩溃。
let tem = rel.object(ofType: SearchModel.self, forPromaykey: "1")
- 条件查询: 根据
断言字符串
或者NSPredicate 谓词
查询某张表中的符合条件数据
let tem = rel.object(SearchModel.self).filter("searchT == %@", "无限不可控"
let predicate = NSPredicate(format: "searchT contains %@ and SearchType == ","控制",1)
let temps = rel.objects(SearchModel.self).filter(predicate)
数据排序
/* 根据搜索内容排序 默认是升序排序*/
let lists = rel.objects(SearchModel.self).sorted(byKeyPath: "SearchT")
/* 根据搜索内筒降序排序*/
let lists = rel.objects(SearchModel.self).sorted(byKeyPath: "SearchT", ascending: false)
增加数据
//替换存在的历史记录
let model = SearchHisModel(value: [searchBar.text!,isNotHomeComing == 1 ? 0 : 1, Date()])
let lists = rel.objects(SearchHisModel.self)
if lists.count > 0 {
for temp in lists {
if temp.searchT == model.searchT && temp.searchType == model.searchType{
rel.delete(temp)
break
}
}
}
try! rel.write {
rel.add(model)
}
删除数据
/* 删除指定类型的数据*/
let tem = rel.objects(SearchHisModel.self).filter("searchType == %lu", isNotHomeComing)
try! rel.write {
rel.delete(tem)
}
resetSubViews()
self.tableView?.reloadData()
修改数据
- 直接更细内容
let lists = rel.objects(SearchModel.self)
for model in lists{
if model.SearchT == "某一内容" {
try! rel.write {
model.SearchT = ""
}
break
}
}
- 根据主键更新
如果在model类型中设置了主键的话,那么你可以使用realm().add(_:update:)