FJCT_ニフクラ mobile backend(mBaaS)お役立ちブログ

スマホアプリ開発にニフクラ mobile backend(mBaaS)。アプリ開発に役立つ情報をおとどけ!

SwiftでObjective-C SDKを利用されている方向けにSwift SDKとの違いを解説(データストア編)

f:id:mbaasdevrel:20180806093819p:plain

iOSアプリの開発時にSwiftを使っているケースが増えています。その際、各種SDKの利用にObjective-C版を使われることがまだまだ多いようです。Objective-C版は昔から使われていて、こなれていますし、言語のバージョンアップも行われなくなっています。

しかしAppleはダイナミックな変化も軽々と行ってきます。今後のことを考えると、Swiftで作られたライブラリを使っていくべきではないでしょうか。今回はニフクラ mobile backendで提供しているObjective-C SDKとSwift SDKについて、Swiftから使った場合のコードの違いについて解説します。

SDKのインストールについて

Objective-C版のSDKはCocoaPods、Carthageでインストールできます。Swift SDKは現時点ではCocoaPodsのみサポートしています。

もちろん、どちらもSDKを直接読み込んで使うこともできます。

初期化

Objective-C版の場合の初期化です。

NCMB.setApplicationKey("YOUR_APPLICATION_KEY", clientKey: "YOUR_CLIENT_KEY")

Swift版の場合の初期化です。Swift版はアプリケーションキー、クライアントキーそれぞれをパラメーター名を指定して適用します。

NCMB.initialize(applicationKey: "YOUR_APPLICATION_KEY", clientKey: "YOUR_CLIENT_KEY");

データストア

今回はデータストアの使い方について解説します。Objective-C SDKでデータストアを新規保存する際のコードです。

let object = NCMBObject.init(className: "TestClass")
object?.setObject("Hello world", forKey: "message")
object?.saveInBackground({error in
    if error != nil {
        print("エラー")
        print(error)
    } else {
        print("保存成功")
    }
})

Swift SDKで保存する場合です。setObjectのようなメソッドを使わずにデータを指定できるので、より自然な形で書けているかと思います。

let object : NCMBObject = NCMBObject(className: "TestClass")
object["message"] = "Hello world"
object.saveInBackground(callback: { result in
    switch result {
        case .success:
            print("保存に成功しました")
        case let .failure(error):
            print("保存に失敗しました: \(error)")
    }
})

データの検索

データストアを検索する場合のコードです。こちらはObjective-C SDKをSwiftから使う場合です。

let query = NCMBQuery.init(className: "TestClass")
query?.whereKey("author", equalTo: "ncmb")
query?.findObjectsInBackground({(objects, error) in
    if error != nil {
        print(error)
    } else {
        print(objects)
    }
})

Swift SDKの場合です。whereの書き方、findInBackgroundなどメソッド名が異なります。また、データの取り出し方も異なります。

let query = NCMBQuery.getQuery(className: "TestClass")
query.where(field: "author", equalTo: "ncmb")
query.findInBackground(callback: { result in
  switch result {
    case let .success(array):
      print("取得に成功しました 件数: \(array.count)")
    case let .failure(error):
      print("取得に失敗しました: \(error)")
  }
})

まとめ

Objective-C SDKをSwiftから使う場合、ドキュメントとはメソッド名が異なるので変換が必要です。Swift SDKはドキュメント通りに記述するだけで利用できます。Swiftは言語自体のバージョンアップも行われるので、それに追従していく必要がありますが、バージョンを重ねる毎により簡便に書けるようになっています。ぜひSwiftを使われる際にはSwift SDKとともに使ってみてください。

イントロダクション (Swift) : クイックスタート | ニフクラ mobile backend

中津川 篤司

中津川 篤司

NCMBエヴァンジェリスト。プログラマ、エンジニアとしていくつかの企業で働き、28歳のときに独立。 2004年、まだ情報が少なかったオープンソースソフトの技術ブログ「MOONGIFT」を開設し、毎日情報を発信している。2013年に法人化、ビジネスとエンジニアを結ぶDXエージェンシー「DevRel」活動をスタート。