【導入編】Swift Realm

# はじめに
AndroidではRealmを利用したことがありましたが、直近にSwiftでアプリを作ることになり、Relamを使うことになると思うので色々試したいと思います。
今回は、Realmの導入から、簡単なデータの追加・更新までやってみたいと思います。

# 環境
- XCode:7.3.1
- iOS:9.3
- Swift:2.2
- Realm:1.0.1

# 導入
## CocoaPodsをインストール
CocoaPodsをインストールしていない場合は、以下を参考に導入してみてください

1.gemでインストールする
```
sudo gem install cocoapods
```

2.ターミナルを起動しなおしてバージョンを確認する
```
pod --version
1.0.1
```

3.setup

```
pod setup

Setting up CocoaPods master repo
  $ /usr/bin/git pull --ff-only
  From https://github.com/CocoaPods/Specs
     d6fd82b..495e021  master     -> origin/master
  Updating d6fd82b..495e021
  Fast-forward
   Specs/MXTouchID/1.0.1/MXTouchID.podspec.json | 21 +++++++++++++++++++++
   1 file changed, 21 insertions(+)
   create mode 100644 Specs/MXTouchID/1.0.1/MXTouchID.podspec.json
Setup completed
```

##RealmをCocoaPodsでインストールする
1.Realmを利用したいプロジェクトに移動する

```
cd <project root directory>
ls -la
total 0
drwxr-xr-x   5 kazuhiro  staff  170  7  9 16:25 .
drwxr-xr-x   6 kazuhiro  staff  204  7  9 16:25 ..
drwxr-xr-x  12 kazuhiro  staff  408  7  9 17:15 .git
drwxr-xr-x   7 kazuhiro  staff  238  7  9 16:25 RealmSample
drwxr-xr-x   5 kazuhiro  staff  170  7  9 16:25 RealmSample.xcodeproj
```

2.CocoaPodsを初期化しPodFileを作成する。

```
pod init
```

3.Podfileを編集する
ブロックを用いることで、ターゲットごとにインストールするpodを切り替えることができます。
必要に応じて記述してください。

```
vi Profile

<ブロックを利用しない場合>
target '<Project name>'
    pod 'Realm'

<ブロックを利用する場合>
target '<Project name>', exclusive: true do
    pod 'Realm'
end

target '<TestProject name>', exclusive: true do
    pod 'Realm/Headers'
end
```

4.インストールする

```
pod install

Analyzing dependencies
Downloading dependencies
Using Realm (1.0.1)
Generating Pods project
Integrating client project
Sending stats
Pod installation complete! There is 1 dependency from the Podfile and 1 total pod installed.
```

5.作成されたworkspaceをクリックして起動する
![スクリーンショット 2016-07-09 20.52.18.png](https://qiita-image-store.s3.amazonaws.com/0/96091/b285639e-4438-e5d1-5ece-9a9558661bbc.png)

6.Linked Frameworks and Librariesに以下のライブラリを追加する

![スクリーンショット 2016-07-09 20.54.44.png](https://qiita-image-store.s3.amazonaws.com/0/96091/0ca0c1b7-f2c9-9121-d513-02848878078c.png)

- Realm.framework
- RealmSwift.framework

![スクリーンショット 2016-07-09 20.55.52.png](https://qiita-image-store.s3.amazonaws.com/0/96091/7f484e9f-badc-4c5a-d058-f3aa8fccd312.png)

ライブラリを選択して、addボタンで追加する

![スクリーンショット 2016-07-09 20.57.21.png](https://qiita-image-store.s3.amazonaws.com/0/96091/baef81b1-bb88-1025-d3d9-3c44e1a90d9a.png)

# Realm Xcode Pruginの導入
Xcodeプラグインを使うことでRealmモデルファイルの作成が楽になるので導入しておきましょう

## Alcatraz
Alcatrazを導入していない場合は追加してください。
インストール後、xCodeを再起動すると、window>PackageManagerが追加されます

```
curl -fsSL https://raw.github.com/supermarin/Alcatraz/master/Scripts/install.sh | sh

```

Xcodeを起動し、起動時に「Load Bundles」を選択する。

## Pluginを導入する
1.window>Package Manager>Realm と入力する

![スクリーンショット 2016-07-09 21.14.18.png](https://qiita-image-store.s3.amazonaws.com/0/96091/20bf1364-c9d3-a469-765f-9043d16fbc2f.png)


![スクリーンショット 2016-07-09 21.15.33.png](https://qiita-image-store.s3.amazonaws.com/0/96091/f982c1aa-674c-f710-5db4-e15d5dd94a8d.png)

## ReamlBrowser
Realm Browserとは、realm ファイルを閲覧、編集するためのMacアプリです。

## RealmPlugin
RealmファイルをFileから作成するためのPluginです。
File>New>でRealmを選択

![スクリーンショット 2016-07-09 21.21.37.png](https://qiita-image-store.s3.amazonaws.com/0/96091/d40553a2-541a-d445-b6ca-b20c6496af0a.png)

# Relamを使ってみよう
今回は、簡単なデータ追加、削除などを試してみたいと思います。

1.まずはスキーマを作成する

今回は、簡単なユーザー情報を管理するモデルを作成します。

```RealmSwift.swift
import Foundation
import RealmSwift

class RealmUser: Object {
    dynamic var id : Int = 0;
    dynamic var nickname = "";
    dynamic var age: Int = 0;
}

```

2.実際にデータを追加してみましょう

```ViewController.swift
import UIKit
import RealmSwift

class ViewController: UIViewController {

    let realmDB = RealmUser()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func realmConnect() {
        realmDB.id = 1;
        realmDB.age = 26;
        realmDB.nickname = "kazuhiro";
        self.save();
        self.find();
    }

    /**
    保存処理
    */
    func save() {
        do {
            let realm = try Realm()

            try realm.write {
                realm.add(self.realmDB)
            }
        } catch {

        }
    }
    
    func find() {
        let realm = try! Realm()
        let dataContent = realm.objects(RealmUser)
        print(dataContent)
    }
    
    func dataUpdate() {
        
        do {
            let realm = try! Realm()

            let data = realm.objects(RealmUser).last!
            try realm.write {
                data.nickname = "hirokazu"
            }
            
        } catch {
            
        }
    }
    
    func deleate() {
        
        do {
            let realm = try! Realm()
            
            let data = realm.objects(RealmUser).last!
            
            try realm.write {
                realm.delete(data)
            }
            
        } catch {
            
        }
    }
}

```

# 参考
https://realm.io/jp/docs/swift/latest/
http://qiita.com/See_Ku/items/6211690df3c56255fde4