0
0

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 3 years have passed since last update.

NCMBのSwift SDKを使ってポインターデータを扱う

Posted at

NCMB(ニフクラ mobile backend)では各種プラットフォーム向けにSDKを出していますが、今回はSwift SDKに関する記事です。まだ開発途中ということもあって、実装されていない機能もあります(執筆時点でのバージョンは1.2.0です)。今回はデータストア(クラウドデータベース)におけるポインター(データを1対1の関係で連携させるもの)の使い方を紹介します。

ポインターとは

ポインターはあるデータと別なデータを1対1の関係で連携させるものです。個人データにおける住所の都道府県マスタと連携させるようなイメージです。

データ形式は次のようになっており、他の一般的なデータ形式(文字列や数字など)と比べると特殊です。

{
    "__type": "Pointer",
    "className": "連携先のデータストアクラス名",
    "objectId": "連携先のデータのユニークID"
}

このフォーマットに従ってデータを保存すれば、ポインターが扱えるようになります。

今回のプロジェクト

今回は言語がSwift、インタフェースがSwiftUI、ライフサイクルはSwiftUI Appとしています。

SDKのインストール

FileメニューからSwift Packages > Add Package Dependencyと選択します。

ScreenShot_ 2021-08-02 9.35.23.png

出てきたダイアログでSwift SDKのGitリポジトリURLを入力します。GitHubのリポジトリでHTTPSとして取得できるもの、または下記URLになります。

ScreenShot_ 2021-08-02 9.35.56.png

https://github.com/NIFCLOUD-mbaas/ncmb_swift.git

バージョンは最新のものでかまいません。

ScreenShot_ 2021-08-02 9.36.05.png

後はFinishボタンを押せば完了です。

ScreenShot_ 2021-08-02 9.36.40.png

初期化

今回はSwiftUIを利用しています。ライフサイクルもSwiftUIです。

まずSDKをインポートします。

import SwiftUI
import NCMB

次に scenePhase を追加します。

@main
struct forumApp: App {
    // 追加
    @Environment(\.scenePhase) private var scenePhase

後は body 内で onChange を使って初期化します。

var body: some Scene {
    WindowGroup {
        ContentView()
    }.onChange(of: scenePhase) { scene in
        switch scene {
        case .active:
            // キーの設定
            let applicationKey = "YOUR_APPLICATION_KEY"
            let clientKey = "YOUR_CLIENT_KEY"
            // 初期化
            NCMB.initialize(applicationKey: applicationKey, clientKey: clientKey)
        case .background: break
        case .inactive: break
        default: break
        }
    }
}

ポインターのデータ保存

今回は掲示板のようなスレッドクラス(Thread)に幾つかのコメントクラス(Comment)が紐付く形とします。コメントクラスを保存する際に、スレッドクラスのデータをDictionary型で定義します。

comment["thread"] = [
            "objectId": (thread["objectId"] ?? "") as String,
            "__type": "Pointer",
            "className": "Thread"
        ]
comment.save()

ポインターのデータを使って検索

あるスレッドに紐付くコメントを一覧で取得したい場合、検索条件にスレッドクラスを用います。この時も、ポインターのデータ型にして指定すると、希望した結果が取得できます。

var query = NCMBQuery.getQuery(className: "Comment")
query
    .where(field: "thread", equalTo: [
        "objectId": (thread["objectId"] ?? "") as String,
        "__type": "Pointer",
        "className": "Thread"
    ])
let results = query.find()

まとめ

ポインター型を使えば、データ同士の結びつきが表現できます。本当は include というメソッドを用意してコメントクラスからスレッドクラスを含めて取得することもできるのですが、まだ用意されていません。これは、今後のバージョンアップで実装されるはずです。また、ポインターの扱いについても、もっと手軽になると思います。

現状のSwift SDKでポインターデータを扱う際には、こちらを参考にしてください。

mBaaSでサーバー開発不要! | ニフクラ mobile backend

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?