NiftyCloud mBaaS + Swift データストアへの読み書き


NiftyCloud mBaaSをSwiftから使う情報がほとんどないので、自分でやってみたメモ書きです。
こちら↓のiOSアプリで使ってみました。
[OnWorkってこんなアプリです](http://meltingpot.co.jp/onwork_info/)


##0.環境
　Xcode 8.2 + Swift 3
　[iOS SDK Version2.0.0] (https://github.com/NIFTYCloud-mbaas/ncmb_ios)


**Swift3用に書き直しました**
　
##1.準備
　1) iOS用SDKを組み込む
　2) bridge-headerを準備

```
//  NCMB-bridge-header.h

#ifndef NCMB_bridge_header_h
#define NCMB_bridge_header_h

#import "NCMB/NCMB.h"

#endif /* NCMB_bridge_header_h */
```

　3 ) AppDelegateにアプリケーションキー設定を追加

```language:Swift
    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
 
        NCMB.setApplicationKey("YOUR_APPKEY",
            clientKey: "YOUR_CLIENTKEY")
        
        return true
    }
```


##2.データストアからの読み出し

下記のクラスからcompanyIDをキーにしてcompanyNameを読みだして返す関数の例です。
クラス名：Company
フィールド：companyID　会社のID
フィールド：companyName　会社の名前


```language:Swift3
/// get name of the company
///
/// - parameter companyID: company ID with String
/// - returns: companyName with String
func getCompanyName(_ companyID:String) -> String {
    var companyName:String = ""
    
    let query = NCMBQuery(className: "Company")
    query?.whereKey("companyID", equalTo: companyID)
    var results:[AnyObject] = []
    do {
        results = try query!.findObjects() as [AnyObject]
    } catch  let error1 as NSError  {
        print("\(error1)")
        return companyName
    }
    if results.count > 0 {
        let result = results[0] as? NCMBObject
        companyName = result?.object(forKey:"companyName")  as? String ?? ""
    }
    return companyName
    
}
```


##3.データストアへの追加

下記のクラスへレコードを書き込む（追加する）関数の例です。
クラス名：Company
フィールド：companyID　会社のID
フィールド：companyName　会社の名前

 * companyInfoはcompanyID, companyNameを含む構造体として定義してあります

``` language:Swift3
/// add company record to Company Class
///
/// - parameter : companyInfo
/// - returns:  nothing
func addCompany(_ company:companyInfo) {
    
    let companyObject = NCMBObject(className: "Company")
    
    companyObject?.setObject(company.companyName,forKey:"CompanyName")
    companyObject?.setObject(company.companyID,forKey:"companyID")
    
    companyObject?.saveInBackground({(error) in
        if error != nil {print("Save error : ",error!)}
    })
    
}

```

##4.データストアの更新

下記のクラスからcompanyIDをキーにして登録済みのレコードのcompanyNameを更新する関数の例です。
クラス名：Company
フィールド：companyID　会社のID
フィールド：companyName　会社の名前

 * companyInfoはcompanyID, companyNameを含む構造体として定義してあります


 __* フィールドのデータを初期化したい場合はnilを設定すれば良いらしいです。
 　管理画面から見ると(undefined)には戻りませんが等価の扱いということです。
 　ただし、位置情報フィールドは初期化不可。__
 参照： https://github.com/NIFTYCloud-mbaas/UserCommunity/issues/272


``` language:Swift3
/// update Company record of Company Class
///
/// - parameter : companyInfo
/// - returns:  nothing
func updateCompany(_ company:companyInfo) {
    
    let query = NCMBQuery(className: "Company")
    query?.whereKey("companyID", equalTo: company.companyID)
    var results:[AnyObject] = []
    do {
        results = try query!.findObjects() as [AnyObject]
    } catch  let error1 as NSError  {
        print("\(error1)")
        return
    }
    if results.count > 0 {
        let obj = results[0] as! NCMBObject
        
        obj.setObject(company.companyName,forKey:"CompanyName")
        
        obj.saveInBackground({(error) in
            if error != nil {print("Save error : ",error!)}
        })
        
    }
}

```

##5.その他
ご意見ご要望等あればコメントください。
ファイルストアと会員管理については随時投稿予定です。