11
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

仙台iOS開発者勉強会(SWWDC)Advent Calendar 2014

Day 24

iOS側の操作だけで出来る!Swift×Azure入門

Last updated at Posted at 2014-12-24

#はじめに
以前書いた記事、Swift×Azureをやってみたらすごく便利っぽい!で紹介したようにAzureは便利っぽいです。
以前の記事では本当の触りの紹介だけでしたが、その後サンプルソースを元にデータベースとのデータのやり取りをやってみたのでどうやるのかを紹介します。

参考にしたのは以下の公式のリファレンス。
モバイル サービス向け iOS クライアント ライブラリの使用方法
リファレンスではObjective-Cですが、Swiftで書いていきます。

#今回扱うクラスの紹介
##MSTable
MSTableはテーブル参照用のクラスです。
データの挿入、取得、更新、削除はこのクラスのインスタンスメソッドで行います。
データの取得はNSPredicateやクエリを用いて条件を追加して行うことができます。
簡単なものはNSPredicate、複雑なものはクエリを用いて行います。
クエリはWindowsAzureMobileServices.frameworkにあるMSQueryを使うと簡単です。

##MSQuery
MSQueryはWindowsAzureMobileServices.frameworkに入っているクエリのクラスです。
データの検索条件を指定することができます。
昇順、降順、何個のデータを取ってくるか、何番目から取ってくるか、このフィールドの値を取ってきたい、など。

#テーブルの扱い方
##データの挿入
挿入するデータはNSDictionary型で用意します。
tableはMSTableのインスタンスで、プロパティとして宣言してあります。
MSTableクラスのインスタンスメソッドの
insert(item: NSDictionary, completion: MSItemBlock)
メソッドでデータベースのテーブルに値を挿入することができます。

let itemToInsert: NSDictionary = ["text": "Swiftたのしい", "complete": false]

table!.insert(itemToInsert) { (result, error)  in
    // なにかする。とりあえず結果をプリント。
    println("result: \(result)")
}

##データの取得
###データの全件取得
MSTableクラスのインスタンスメソッドの
readWithPredicate(completion: MSReadQueryBlock)
メソッドでデータベースのテーブルの値を全件取得することができます。

table?.readWithCompletion() { (result, totalCount, error)  in
    println("result: \(result)")
}

###NSPredicateを用いる場合
NSPredicateを使ってフィルターをかけることができます。
MSTableクラスのインスタンスメソッドの
readWithPredicate(item: NSDictionary, completion: MSReadQueryBlock)
メソッドでデータベースのテーブルの条件の一致する値を取得することができます。
以下の例はcompleteフィールドの値がfalseのもの

let predicate = NSPredicate(format: "complete == false" )

table!.readWithPredicate(predicate) { (result, totalCount, error)  in
    println("result: \(result)")
}

###MSQueryを用いる場合
MSQueryを使ってより複雑なフィルターをかけることができます。
以下はデータの作成日を昇順でソートして、テーブルの1番目から2個の値をtextフィールドから取得する例です。

let query = MSQuery(table: table) 

// 以下の二つのメソッドはそれぞれ昇順、降順にソートするメソッド。
query.orderByAscending("__createdAt")
//query.orderByDescending("__createdAt")

// テーブルの何番目から値を取ってくるか。
query.fetchOffset = 1

// テーブルから何個の値を取ってくるか。
query.fetchLimit = 2

// textフィールドの値のみを取得
query.selectFields = ["text"]

query.readWithCompletion({ (result, totalCount, error) in
    println("result: \(result)")
})

##データの更新
データの更新はMSTableのインスタンスメソッド

update(item: NSDictionary, completion: MSItemBlock)

を使います。

例はこんな感じ。
item変数に代入するresultはテーブルから取得したデータです。
取得した値に対して変更を加えて、その変更した値をupdateメソッドの引数として渡します。
readメソッドで取得したresultの構造は配列のの中に連想配列が入った二次元配列なので、以下の例ではとりあえずresultのindex0番の値を書き換えてやるようにしています。

var item: NSMutableDictionary = (result as NSArray).objectAtIndex(0) as NSMutableDictionary
item.setObject(true, forKey: "complete")

self.table?.update(item) { (result, error) in
    println("result: \(result)")
}

##データの削除
削除も更新と同じように行います。
使うメソッドはこちら。

delete(item: NSDictionary, completion: MSItemBlock)

例としてはこちら。

var item: NSDictionary = (result as NSArray).objectAtIndex(0) as NSDictionary
self.table?.delete(item) { (result, error) in
    println("result: \(result)")
}

#まとめ
自分は現在Webであったりサーバーであったりデータベースに関する知識はほとんど無く、iOSだけやっていますが、そんな自分でも簡単にAzureでデータベース連携を実装することができました。
敷居が低くDB連携できるので、君もレッツAzure。

11
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?