LoginSignup
12

More than 5 years have passed since last update.

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。

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
12