#はじめに
以前書いた記事、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。