持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情
大家好,我是小黑,一个还没秃头的程序员~~~
人生苦短,要知道遗憾要比失败可怕的多
今天要介绍的是SwiftUI中用于操作数据的sqlite库,它和core 同样是用于数据存取的,但是我对sql数据比较亲切,所以先介绍如何使用sqlite库进行数据操作,效果可以参考我以往的文章: iOS-基于SwiftUI开发的简易备忘录,适合新人学习这是一个简易的备忘录app,适合新人学习,话不多说,开始正文:
SQLite.swift也是一个轻量级的、对swift友好的C语言包装器 API。
(一)添加依赖
先在swift package中添加sqlite的远程库
(二)model
准备一个实现了Identifiable协议的实体类,将ID设置成uuid,这样可以保证值唯一,如果实现了Identifiable却没有任何一个属性为唯一值,将会报错,这里忘了截图,大家可以自己试试,实体类代码如下:
struct NoteModel: Identifiable{
var id = UUID()
var title : String=""
var content : String=""
var createTimeStamp:String="0"
var updateTimeStamp:String="0"
}
(三)Dao
准备一个对于这个实体所对应的数据表进行操作的工具类,充当Dao层作用
新增
func insert(note:NoteModel) -> Bool{
let insert = getNoteTable().insert(id_column<-note.id,title_column <- note.title,content_column<-note.content,create_time_stamp_column<-note.createTimeStamp,update_time_stamp_column<-note.updateTimeStamp)
if let rowId = try? getDB().run(insert) {
print("插入成功:\(rowId)条记录")
getNotes(keyWord: searchContent, orderby: orderbyIndex)
return true
} else {
print("插入失败")
return false
}
}
删除
func delete( note:NoteModel) -> Bool{
let deleteCmd = getNoteTable().filter(Expression<UUID>("id") == note.id)
if let count = try? getDB().run(deleteCmd.delete()) {
return count>0
} else {
return false
}
}
这里的filter类似于sql语句中的where查询
修改
func update(note:NoteModel) -> Bool {
let updateCmd=getNoteTable().filter(id_column==note.id).update(id_column<-note.id,title_column <- note.title,content_column<-note.content,update_time_stamp_column<-Date().milliStamp)
print(updateCmd)
if let rowId = try? getDB().run(updateCmd) {
print("更新成功:\(rowId)条记录")
getNotes(keyWord: searchContent, orderby: orderbyIndex)
return true
} else {
print("更新失败")
return false
}
}
filter相当于where的作用,update中代表将值赋给相对应的列
查询
// 查询
func getNotes(keyWord:String,orderby:Int) -> Void{
self.searchContent=keyWord
self.orderbyIndex=orderby
var orderby2:SQLite.Expressible
switch orderby {
case 0:
orderby2=create_time_stamp_column.desc
case 1:
orderby2=update_time_stamp_column.desc
default:
orderby2=title_column.desc
}
let query = getNoteTable().order(orderby2).where(title_column.like("%\(keyWord)%")||content_column.like("%\(keyWord)%"))
print(query)
do {
noteList.removeAll()
let results = try getDB().prepare(query);
for noteRow in results {
let note = NoteModel(id: noteRow[id_column], title: noteRow[title_column], content: noteRow[content_column], createTimeStamp: noteRow[create_time_stamp_column], updateTimeStamp: noteRow[update_time_stamp_column])
noteList.append(note)
}
print("查询成功")
} catch {
print("出错")
}
}
这里的查询用到了where函数,作为筛选,where函数中用到了like函数,相当于sql语句中的模糊查询,||或者&&相当于sql语句中的or 或者 and 查询,最后可以调用desc表示倒序查询
字段列
定义列的代码如下:
let id_column = Expression<UUID>("id")
let title_column=Expression<String>("title")
let content_column=Expression<String>("content")
let create_time_stamp_column=Expression<String>("createTimeStamp")
let update_time_stamp_column=Expression<String>("updateTimeStamp")
以上便是swift中关于sqlite的使用,今天的swiftUI学习分享就到这里,后面我会持续输出iOS开发笔记,感谢大家的阅读!共同努力!