Swift×Azureをやってみたらすごく簡単便利っぽい！

大学も冬休みに突入して三日目ですが、曜日感覚が速攻でお亡くなりになられています。
今日が土曜日だと思っていたらアドカレ担当日の日曜日でした。
日は超えてますが、まだ21日の25時ということでこれから書きます。。。

#やってみた経緯
以前、仙台iOS開発者勉強会でMicrosoft MVP様でいらっしゃる@nnasaki さんのAzureに関する話でMobileServiceを使ってデータベース連携が簡単にできるよ！ということを聞き、かくかくしかじかあってMicrosoft BizSparkも手に入れることができたので早速試してみました。
その時の資料はこちら。
[Microsoft Azure と Swift で開発をする](http://www.slideshare.net/YamamotoMasaki/microsoft-azureswift)

AzureのMobileServiceを新規に立ち上げるとSwiftで書かれたTodoアプリのサンプルソースがダウンロードできます。
詳しくはこちら。
[Microsoft Azureモバイルサービスにてswift版がダウンロードできるようになってました。](http://nnasaki.hatenablog.com/entry/2014/07/13/092716)

最近のMSはトップが変わってから純粋なMS製品とかだけでなくiOSとかAndroidとか今の時代の環境を取り巻くようなサービス展開を目指しているようで、こういうものが用意されたのもその動きなんだと思います。

![2014-12-22 01.33.51.png](https://qiita-image-store.s3.amazonaws.com/0/46597/4af19c01-8e86-86e7-092f-a17686814b74.png)

#サンプルソースを動かす上での注意点
サンプルソースをダウンロードしていざ実行！と思ったところ、いくつか直さなくてはいけない点があったのでそれの紹介です。
これは2014/12/17のバージョンでの話です。

###その一
ToDoTableViewController.swiftのこの部分

```
cell.textLabel?.text = item["text"] as? String
cell.textLabel?.textColor = UIColor.blackColor()
```

を以下のように直す。

```
cell.textLabel.text = item["text"] as? String
cell.textLabel.textColor = UIColor.blackColor()
```

###その二
AppDelegate.swiftのこの部分

```
appearance.titleTextAttributes = NSDictionary(objects: [UIColor.darkGrayColor(), UIFont(name: "Helvetica-Light", size: 20.0)], forKeys: [NSForegroundColorAttributeName, NSFontAttributeName])
```

を以下のように直す。

```
appearance.barTintColor = UIColor(red: 69.2/255.0, green: 177.2/255.0, blue: 255.0/255.0, alpha: 1.0)
        appearance.titleTextAttributes = NSDictionary(objects: [UIColor.darkGrayColor(), UIFont(name: "Helvetica-Light", size: 20.0)], forKeys: [NSForegroundColorAttributeName, NSFontAttributeName], count: 2)
```

###その三
iPhoneでビルドする場合はMain.storyboardのSegueをPopoverからModalに直す。
iPadの場合だとPopoverのままでオーケーです。

![スクリーンショット 2014-12-22 1.28.58.png](https://qiita-image-store.s3.amazonaws.com/0/46597/4934f0ec-5ffd-40ef-6ed3-cb473c51b356.png)


#美味しいところ
##フィールドを自動で追加してくれる
テーブルへの値の挿入はToDoTableControllerのdidSaveItem(text:)関数で行われています。
その中を見るとDictionary型のオブジェクトを追加する形になっています。

追加するオブジェクトはこちら。

```
let itemToInsert = ["text": text, "complete": false]
```

プラスボタンを押して遷移した画面の先で記入したtextを追加します。
TODOアプリなのでcompleteはそのTODOが完了したかどうかのフラグ。
この値で追加するとテーブルはこんな感じ。

![スクリーンショット 2014-12-22 1.43.52.png](https://qiita-image-store.s3.amazonaws.com/0/46597/cc707ce2-4144-9fca-fe7f-63441d9d282a.png)

ここにnumberというkeyで値を追加すると以下のように自動でフィールドを追加してくれます。

```
let itemToInsert = ["text": text, "complete": false, "number": 1]
```

![スクリーンショット 2014-12-22 1.50.02.png](https://qiita-image-store.s3.amazonaws.com/0/46597/f7d34078-d4e2-d2aa-bac2-582ebb6f78f1.png)


##便利なフレームワーク
###MSTable
フレームワークはダウンロードしたサンプルプロジェクトに入っていますが、その中のMSTableでテーブルの値に変更を加えることができます。フレームワークはObjective-Cで書かれているため、Swiftで扱うためにBridgingHeaderを使っています。

___Insert___

```
-(void)insert:(NSDictionary *)item completion:(MSItemBlock)completion;
-(void)insert:(NSDictionary *)item
   parameters:(NSDictionary *)parameters
   completion:(MSItemBlock)completion;
```

___Read___

```
-(void)readWithId:(id)itemId completion:(MSItemBlock)completion;
-(void)readWithId:(id)itemId
       parameters:(NSDictionary *)parameters
       completion:(MSItemBlock)completion;
-(void)readWithQueryString:(NSString *)queryString
                completion:(MSReadQueryBlock)completion;
-(void)readWithCompletion:(MSReadQueryBlock)completion;
-(void)readWithPredicate:(NSPredicate *) predicate
      completion:(MSReadQueryBlock)completion;
```

___Update___

```
-(void)update:(NSDictionary *)item completion:(MSItemBlock)completion;
-(void)update:(NSDictionary *)item
   parameters:(NSDictionary *)parameters
   completion:(MSItemBlock)completion;
```

___Delete___

```
-(void)delete:(NSDictionary *)item completion:(MSDeleteBlock)completion;
-(void)delete:(NSDictionary *)item
   parameters:(NSDictionary *)parameters
   completion:(MSDeleteBlock)completion;
-(void)deleteWithId:(id)itemId completion:(MSDeleteBlock)completion;
-(void)deleteWithId:(id)itemId
         parameters:(NSDictionary *)parameters
         completion:(MSDeleteBlock)completion;
```

#まとめ
さて、サンプルからごにょごにょいじってみた感想としては__超簡単__。
サーバーだのデータベースだのを良く知らずとも良い感じに処理してくれたり、WindowsAzureMobileServices.frameworkが分かりやすくて便利なクラスを提供してくれているので簡単なことならiOSの知識だけで全然イケます。
__これがBaasの力か...!!__

今のところ触ってみたところまでだとここまでです。
次回はもうちょっと色々試してみます。