Deca-pod.jp

Anything

Realm1.0入門 with Xcode7.3

iOSアプリ開発時、DB選択肢のひとつとして挙がるのがRealm

国内でのコミュニティも活発で、初心者でも取っ付き易い雰囲気があります。

当然realmでweb検索すると、情報は山程出てきますが、objc時代の名残を引きずったTipsが多くあり、 私自身迷ってしまう事がありました。

そこで、2016/June現在最新の手順をここに記します。


cocoapodsをインストール

easyramble.com

cocoapods

ターミナルから、Xcodeプロジェクトのディレクトリへ移動をして

pod init

上記コマンドでcocoapods設定ファイルを作成します。 f:id:vaikong:20160612222021p:plain 作成されたpod fileを書き換えます。

# Uncomment this line to define a global platform for your project
# platform :ios, '9.0'

target 'プロジェクト名' do
  # Comment this line if you're not using Swift and don't want to use dynamic frameworks
  use_frameworks!

  pod 'RealmSwift'
end

その後ターミナル上で

pod install

コマンドでRealmをインストールします。 cocoa podsのバージョンが古いとRealmのインストールに失敗するので注意してください。

再度Xcodeのプロジェクトディレクトリへ移動するとプロジェクト名.xcworkspaceというファイルが作成されています。 f:id:vaikong:20160612222250p:plain

作成されたワークスペースXcodeで開きます。

プロジェクトを開いたら、Realmの動作確認のため、⌘+shift+Kでプロジェクトをクリーン後⌘+Bでプロジェクトをビルドします。

クラスの定義

テストクラスを作成します。

import Foundation
import RealmSwift

class Test: Object {
    dynamic var id = ""
    dynamic var name = ""


}

これでRealmを使用する準備が整いました。

CRUD

最低限必要なCRUDだけ押さえておきましょう。

 func create(){

        let test = Test()
        test.id = "1"
        test.name = "ringo"

            let realm = try! Realm()
            try! realm.write{
                realm.add(test)
            }


    }

read

func read(){
        let realm = try! Realm()
        // testクラスのオブジェクトを取得。フィルターに条件を指定できる
        let result = realm.objects(Test).filter("name = 'ringo'")
        //resultには取得されたオブジェクトの配列が代入される
        for obj in result{
            print(obj.name)
            //ringo
        }

    }

update

func update(){
        let realm = try! Realm()
        // Testクラスのオブジェクトを取得。フィルターに条件を指定できる
        let result = realm.objects(Test).filter("name = 'ringo'")
        //resultには取得されたオブジェクトの配列が代入される
        result[0].name = "orange"

        try! realm.write{
                realm.add(test)
            }


    }

delete

func delete(){
          let realm = try! Realm()

          //テストクラスのオブジェクトを取得
          let ringo = realm.objects(Test).filter("name = 'ringo'")

          try! realm.write{
           //削除したいオブジェクトを渡す
           realm.delete(ringo)
        }
   }


その他

RealmBrowserで作成したテーブルを見れます。

Realm Browser

Realm Browser

  • Realm
  • 開発ツール
  • 無料

どこに参照するスキーマがあるかはこれを使用すると簡単

SimPholders

或いはviewDidLoad()で出力

override func viewDidLoad() {

   // for swift 2.0 Xcode 7
   print(Realm.Configuration.defaultConfiguration.fileURL!)
}

RealmBrowserでcvsファイルを読み込んでテーブルを作成することも可能です。 テストデータをジェネレイトする機能もついています。

データベース作成するなら正規化をしっかりしましょう。