-
-
Save HikaruSato/79e8a796348ff5f1e4e60574a9d6472e to your computer and use it in GitHub Desktop.
Realm Swiftを簡単に使うためのDAO実装サンプル(iOS) ref: http://qiita.com/HIkaruSato/items/d6b38a4882babb03f034
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Foundation | |
import RealmSwift | |
class RealmBaseDao <T : RealmSwift.Object> { | |
let realm: Realm | |
init() { | |
try! realm = Realm() | |
} | |
/** | |
* 新規主キー発行 | |
*/ | |
func newId() -> Int? { | |
guard let key = T.primaryKey() else { | |
//primaryKey未設定 | |
return nil | |
} | |
if let last = realm.objects(T.self).last as? RealmSwift.Object, | |
let lastId = last[key] as? Int { | |
return lastId + 1 | |
} else { | |
return 1 | |
} | |
} | |
/** | |
* 全件取得 | |
*/ | |
func findAll() -> Results<T> { | |
return realm.objects(T.self) | |
} | |
/** | |
* 1件目のみ取得 | |
*/ | |
func findFirst() -> T? { | |
return findAll().first | |
} | |
/** | |
* 指定キーのレコードを取得 | |
*/ | |
func findFirst(key: AnyObject) -> T? { | |
return realm.object(ofType: T.self, forPrimaryKey: key) | |
} | |
/** | |
* 最後のレコードを取得 | |
*/ | |
func findLast() -> T? { | |
return findAll().last | |
} | |
/** | |
* レコード追加を取得 | |
*/ | |
func add(d :T) { | |
do { | |
try realm.write { | |
realm.add(d) | |
} | |
} catch let error as NSError { | |
print(error.description) | |
} | |
} | |
/** | |
* T: RealmSwift.Object で primaryKey()が実装されている時のみ有効 | |
*/ | |
func update(d: T, block:(() -> Void)? = nil) -> Bool { | |
do { | |
try realm.write { | |
block?() | |
realm.add(d, update: true) | |
} | |
return true | |
} catch let error as NSError { | |
print(error.description) | |
} | |
return false | |
} | |
/** | |
* レコード削除 | |
*/ | |
func delete(d: T) { | |
do { | |
try realm.write { | |
realm.delete(d) | |
} | |
} catch let error as NSError { | |
print(error.description) | |
} | |
} | |
/** | |
* レコード全削除 | |
*/ | |
func deleteAll() { | |
let objs = realm.objects(T.self) | |
do { | |
try realm.write { | |
realm.delete(objs) | |
} | |
} catch let error as NSError { | |
print(error.description) | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Foundation | |
import RealmSwift | |
//Realm Object | |
class SampleObject: Object { | |
dynamic var id = 0 | |
dynamic var created = NSDate() | |
override static func primaryKey() -> String? { | |
return "id" | |
} | |
} | |
class SampleObjectViewModel { | |
var id = 0 | |
var created = NSDate() | |
var description:String { | |
return "\(id)," + created.description | |
} | |
//RealmBaseDao<Realm Objectクラス>で、基本的なことができる | |
static let dao = RealmBaseDao<SampleObject>() | |
init(sampleObject:SampleObject) { | |
id = sampleObject.id | |
created = sampleObject.created | |
} | |
static func load() -> [SampleObjectViewModel] { | |
let objects = dao.findAll() | |
return objects.map { SampleObjectViewModel(sampleObject: $0) } | |
} | |
static func create() -> SampleObjectViewModel { | |
let object = SampleObject() | |
object.id = dao.newId()! | |
dao.add(d: object) | |
let viewModel = SampleObjectViewModel(sampleObject:object) | |
return viewModel | |
} | |
func update() { | |
let dao = type(of: self).dao | |
guard let object = dao.findFirst(key: id as AnyObject) else { | |
return | |
} | |
object.created = created | |
let _ = dao.update(d: object) | |
} | |
func delete() { | |
let dao = type(of: self).dao | |
guard let object = dao.findFirst(key: id as AnyObject) else { | |
return | |
} | |
dao.delete(d: object) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment