Realmの基礎の発表をする機会がありましたので、勉強も兼ねて何番煎じかわかりませんが、ToDoアプリを作ってみました。といっても、Tutorial: Building a To-Do App with Realm をほとんど参考にして作り、RealmをCocoaPodsで導入したぐらいしか違いがありませんがw
コードはRealmTodoにありますので、参考にしてください。以下、コードの抜粋をしてRealmの使い方の解説をします。
##ToDoItemモデルクラスの作成
class ToDoItem: RLMObject {
dynamic var name = ""
dynamic var finished = false
}
RLMObjectを継承したクラスを作り、カラムは「dynamic var 変数名 = 初期値」で定義をします。
##ToDoItemモデルのオブジェクトを取得
todosは未完了のタスクで、finishedは完了済みのタスクです。
NSPredicateで条件を定義し、条件にマッチするオブジェクトがtodos, finishedに格納されています。型はRLMResultsでデータベースが更新されたら自動的に最新に反映されるので便利です。
var todos: RLMResults {
get {
let predicate = NSPredicate(format: "finished == false", argumentArray: nil)
return ToDoItem.objectsWithPredicate(predicate)
}
}
var finished: RLMResults {
get {
let predicate = NSPredicate(format: "finished == true", argumentArray: nil)
return ToDoItem.objectsWithPredicate(predicate)
}
}
##オブジェクトの新規追加
トランザクション内で新規追加処理を行います。typedTextはtextFieldの入力値です。TodoItem()でモデルをインスタンス化し、nameカラムに値を入れ、保存をするという流れです。最後にtableViewを更新することで、追加したオブジェクトが反映されます。
func didFinishTypingText(typedText: String?) {
if typedText != "" {
let newTodoItem = ToDoItem()
newTodoItem.name = typedText!
let realm = RLMRealm.defaultRealm()
realm.transactionWithBlock() {
realm.addObject(newTodoItem)
}
// テーブルの更新処理
tableView.reloadData()
}
}
##参考サイト
基礎的なことは下記のサイトに載っていますのでこちらを参考にしてください。というか、まとめ完全版のやつを見ればほとんど大丈夫です。公式ドキュメントもわかりやすいです。