こんにちは😀 フリーランス エンジニアの永田大祐と申します。
初投稿させていただきます。
宜しければ、ストックしていただくとありがたいです。
今回は、文字列,数字,データなどを保存,運用できるiosのデータベースのRealmをSwift3.0でRealmデータベースの使用方法を、導入も含めて投稿させていただきます。*ベストプラクティスではないかもしれませんが、そこはご了承願います。
Realmの公式ホームページはこちらになります。
#####Realmホームページ
#Realm導入方法
####1.Realmデータベースを使用するには、Dynamic Framework
かCocoapods
かCarthage
が必要です。
今回はCocoapodsでの導入方法を紹介させていただきます。
導入するにはターミナルを使用します。
こちらはCocoa podsの公式ホームページになります。
#####Cocoapodsホームページ
Finderでターミナルと検索すると、表示できると思います。
ターミナルでコマンド操作をして、Realmのライブラリーを自分のXcodeプロジェクトに導入します。
####2.Cocoa podsのインストール、バージョン指定。
バージョンの確認方法
pod --version
バージョン指定してCocoapodsのインストール方法
sudo gem install -v 1.0.1 cocoapods
バージョン指定してCocoapodsのアンインストール方法
sudo gem uninstall cocoapods --version '=1.0.1'
######*今回はversion1.0.1の環境で実施します。
####3.pod fileの作成
Xcodeプロジェクト内でpod fileを作成します。
今回は、ターミナル操作での紹介をさせていただきます。
cdと入力することによりプロジェクトのディレクトリ指定できます。
cdと入力後、Xcodeプロジェクトfileをターミナルにドラック&ドロップします。
pod init と入力することにより、pod fileが作成できます。
vim pod fileと入力すると、ターミナル内でpod file が開きます。
iosバージョンによりpod fileの内容も、書き方も変わります。
pod fileに pod 'RealmSwift'と入力します。
Macの一番左上のボタンescボタンを入力して編集モードは終了します。
:wqと入力して、ターミナル内でpodfileを閉じます。
pod installと入力するとRealmライブラリーがXcodeプロジェクト内に導入されます。
ここでエラーが出る場合は、
podインストールがうまくいってない。
入力ミスなどがあるので、ターミナルの表示文をよく見ると良いと思います。
これでXcode内にRealmライブラリーを導入できました。
#Xcode内でのRealm導入方法
こちらは手順はシンプルです。
Xcode内で
import RealmSwiftと記述します。
#Realmを使う
今回はUITableViewControllerを使用します。
####実施すること
1.Realmのobject(class)の作成
2.Realmを宣言して運用
3.Realmの書き込み(保存)、削除
4.Realmデータのソート
5.Realmを使用したサンプルアプリの紹介
サンプルをモデルに紹介していきます。
##1.Realmのobject(class)の作成
Realm objectを使用するにはclassを作成します。
class realmDataSet: Object {
dynamic var now = NSDate()
dynamic var ID = String()
dynamic var Message = String()
dynamic var Message2 = String()
}
ここで変数の型を決定します。IntやDoubleなど様々な型をサポートしているので、こちらを参照してください。
型のチート表
##2.Realmの構造体を作り運用
プロジェクトの全体的に使用したい場合は、グローバルで宣言。
共通化するクラスを作っておくとパターンも良いと思います。
struct RealmModel {
struct realm{
static var realmTry = try!Realm()
static var realmsset = realmDataSet()
static var usersSet = RealmModel.realm.realmTry.objects(realmDataSet.self)
}
}
####⬆︎この方法で他クラスからも参照できます。
##3.Realmの書き込み(保存)、(削除)、(監視)
Realmファイルへ書き込み(保存)、(削除)、(監視)
Realmファイルを開き、
Realmデータベースの実装を管理するクラスです。
func RealmNOtification(views:ViewController){
RealmThread(views:views)
}
func RealmAdd(text:String,Index:IndexPath,now:NSDate){
try!RealmModel.realm.realmTry.write {
RealmModel.realm.usersSet[Index.row].ID = text
}
}
func RealmCreate(now:NSDate,text:String,text2:String){
try!RealmModel.realm.realmTry.write {
RealmModel.realm.realmTry.create(realmDataSet.self,value: [now,text,text2] as [Any])
}
}
func RealmthreadLabel(text:String,Index:Int){
try!RealmModel.realm.realmTry.write {
RealmModel.realm.usersSet[Index].ID = text
}
}
func RealmDeleate(indexPath: IndexPath){
try!RealmModel.realm.realmTry.write {
RealmModel.realm.realmTry.delete(RealmModel.realm.usersSet[indexPath.row])
}
}
##4.Realmデータのソート
文字列検索にNsPridecateの構文を使用しています。Rxメソッドで実施しています。
[NSPreidcateの参考ページ] (https://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&cad=rja&uact=8&sqi=2&ved=0ahUKEwia-rnBnbvPAhWGFpQKHSV1AFsQFggqMAI&url=https%3A%2F%2Frealm.io%2Fnews%2Fnspredicate-cheatsheet%2F&usg=AFQjCNFeu3HjTtqJVN7B1fxcKXjWiOBZhg&bvm=bv.134495766,d.dGo)
func rxSearchBar(search:UISearchBar,text:String?,table:UITableView?){
search
.rx.text.orEmpty
.subscribe(onNext: { [unowned search] query in
if search.text != "" {
//indexの値を渡す
RealmModel.realm.usersSet = RealmModel.realm.realmTry.objects(realmDataSet.self)
.filter("Message BEGINSWITH %@", search.text!)
.sorted(byKeyPath: "Message", ascending: false)
}else if search.text! == ""{
RealmModel.realm.usersSet = RealmModel.realm.realmTry.objects(realmDataSet.self)
.sorted(byKeyPath: "now", ascending: false)
}
table?.reloadData()
})
.addDisposableTo(dis)
}
データを降順や昇順、逆順でソートする方法もあります。
降順
var users = realm.objects(realmDataSet.self)
.sorted(byProperty: "ID", ascending: false)
昇順
var users = realm.objects(realmDataSet.self)
.sorted(byProperty: "ID", ascending: true)
今回は入力順で表示するため、プロパティに現在時刻を取得するNSDate()を
新たに追加しました。
dynamic var now = NSDate()
dynamic var ID = String()
*realmクラスのプロパティの名前変更、追加、削除は一度アプリを起動すると、例外が起きて、クラッシュします。そのような場合は、一度アプリをアンインストーしてください。リリースしてしまった場合などは、今後お伝えするマイグレーション機能で対応します。
##5. Realmを使用したサンプルアプリの紹介
動画もあります。
https://github.com/daisukenagata/RealmSample_Swift3.0/tree/master
##まとめ
Swift3.0でのRealmファイル最適化
アップデートに伴うマイグレーション
マルチスレッド
Realm mobile Pratform
こちらの詳細も記載していきます。今後ともよろしくお願いします。
貴重な時間を割き、お読み下さいましてありがとうございました。😀