Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

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

やってみた経緯

以前、仙台iOS開発者勉強会でMicrosoft MVP様でいらっしゃる@nnasaki さんのAzureに関する話でMobileServiceを使ってデータベース連携が簡単にできるよ!ということを聞き、かくかくしかじかあってMicrosoft BizSparkも手に入れることができたので早速試してみました。
その時の資料はこちら。
Microsoft Azure と Swift で開発をする

AzureのMobileServiceを新規に立ち上げるとSwiftで書かれたTodoアプリのサンプルソースがダウンロードできます。
詳しくはこちら。
Microsoft Azureモバイルサービスにてswift版がダウンロードできるようになってました。

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

2014-12-22 01.33.51.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

美味しいところ

フィールドを自動で追加してくれる

テーブルへの値の挿入はToDoTableControllerのdidSaveItem(text:)関数で行われています。
その中を見るとDictionary型のオブジェクトを追加する形になっています。

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

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

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

スクリーンショット 2014-12-22 1.43.52.png

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

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

スクリーンショット 2014-12-22 1.50.02.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の力か...!!

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

ktanaka117
百合好きのダンボールの人です。 SwiftでiOSアプリを開発していて、最近のホットトピックはテスト、設計、リファクタリング。 Twitter: @ktanaka117
http://tanakalivesinsendai.hatenablog.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away