Realm Swift版
Realm swift中文文檔地址:https://realm.io/cn/docs/swift/latest/#local-migrations
Realm 安裝
教程在這(非新手請?zhí)^)
http://www.reibang.com/p/49cde6aeb43a
我用的是
pod 'RealmSwift'
2.Xcode 插件
Xcode插件讓新建Realm模型model
很輕松揣钦。用Alcatraz安裝RealmPlugin
镀脂。
你使用Xcode新建文件File > New > File… — or ? N
,可以看到有一個新建Realm模型create a new realm model
的選項必尼。
3. 數(shù)據(jù)庫的使用
1. 創(chuàng)建數(shù)據(jù)模型
以項目中為例,存儲記錄。
import Foundation
import RealmSwift
class Dog: Object {
@objc dynamic var name = ""
@objc dynamic var age = 0
}
class Person: Object {
@objc dynamic var ID = 0
@objc dynamic var name = ""
@objc dynamic var age = 0
var dogs = List<Dog>() //model 嵌套
var weeks = List<Int>()//數(shù)組
var strS = List<String>()//數(shù)組
@objc dynamic var haha = 0
@objc dynamic var dfd = 0
@objc dynamic var erer = 0
override static func primaryKey() -> String? {
return "ID"
}//主鍵
}
2. 創(chuàng)建數(shù)據(jù)模型對象
let otherDog = Dog(value: ["name":"豆豆","age":3])
let myDog = Dog()
myDog.name = "Rex"
myDog.age = 1
print("name of dog: \(myDog.name)")
let aPerson = Person(value: ["Jane", 30, [myDog,otherDog],[1,2],["df","df"]])
let otherPerson = Person()
otherPerson.name = "哈哈"
otherPerson.age = 30
otherPerson.dogs = List<Dog>()
otherPerson.dogs.append(myDog)
otherPerson.weeks = List<Int>()
otherPerson.weeks.append(1)
otherPerson.weeks.append(2)
otherPerson.strS = List<String>()
otherPerson.strS.append("sdfsd")
3. 數(shù)據(jù)庫操作(增刪改查)
任何時候都需要獲取Realm實例岗宣,每個線程只需要使用一次即可弄痹。
// 獲取默認的 Realm 數(shù)據(jù)庫
let realm = try! Realm()
//打印地址
print(realm.configuration.fileURL!)
查詢數(shù)據(jù)
- 普通查詢
let lists = realm.object(Person.self)
- 逐漸查詢:根據(jù)逐漸查詢某張表的某條數(shù)據(jù)罩引,模型必須包含主鍵,否則會崩潰排苍。
let tem = realm.object(ofType: Person.self, forPromaykey: "1")
- 條件查詢: 根據(jù)
斷言字符串
或者NSPredicate 謂詞
查詢某張表中的符合條件數(shù)據(jù)
let tem = realm.object(Person.self).filter("name == %@", "哈哈"
let predicate = NSPredicate(format: "name contains %@ and age == ","哈哈"沦寂,1)
let temps = realm.objects(Person.self).filter(predicate)
數(shù)據(jù)排序
/* 根據(jù)搜索內(nèi)容排序 默認是升序排序*/
let lists = realm.objects(Person.self).sorted(byKeyPath: "age")
/* 根據(jù)搜索內(nèi)筒降序排序*/
let lists = realm.objects(Person.self).sorted(byKeyPath: "age", ascending: false)
增加數(shù)據(jù)
//替換存在的歷史記錄
let model = Person(value: ["張三",2])
let lists = realm.objects(Person.self)
if lists.count > 0 {
for temp in lists {
if temp.name == model.name && temp.age == model.age{
realm.delete(temp)
break
}
}
}
try! realm.write {
realm.add(model)
}
刪除數(shù)據(jù)
/* 刪除指定類型的數(shù)據(jù)*/
let tem = realm.objects(Person.self).filter("age == %lu", isNotHomeComing)
try! realm.write {
rel.delete(tem)
}
resetSubViews()
self.tableView?.reloadData()
修改數(shù)據(jù)
- 直接更細內(nèi)容
let lists = realm.objects(Person.self)
for model in lists{
if model.name == "張三" {
try! rel.write {
model.name = ""
}
break
}
}
- 根據(jù)主鍵更新
如果在model類型中設(shè)置了主鍵的話,那么你可以使用realm().add(_:update:)