Firebaseの関連付けについて、code から説明してみます。
日本語のblogには記事が見当たらなかったため
//インスタンスをメンバにしておく
let firestore = Firestore.firestore()
//commentボタンがタップされたときの処理
@IBAction func addCommentTapped(_ sender: Any) {
//commentのテキストフィールドの値がnilで無いことをチェック
guard let commentTxt = addCommentText.text else{ return }
//ここでtransactionを利用する
firestore.runTransaction({ (transaction, error) -> Any? in
//DocumentSnapshot型のプロパティを用意しておくのがポイント
let thoughtDocument: DocumentSnapshot
//エラー処理
do{
try thoughtDocument =
//ここで親テーブルのdocumentIdが取得できる
transaction.getDocument(self.firestore.collection(THOUGHTS_REF)
.document(self.thought.documentId))
}catch let error as NSError {
debugPrint(error)
return nil
}
guard let oldNumComments = thoughtDocument.data()[NUM_COMMENTS] as? Int else
{ return nil }
//transactionのに値をセットする
//userIdもセットする より浅い階層からアクセスできるようにしておく
transaction.setData([
COMMENT_TXT: commentTxt,
TIMESTAMP: FieldValue.serverTimestamp(),
USERNAME: self.username,
//user_idを保持するときはいつもこれを利用します。
USER_ID: Auth.auth().currentUser?.uid ?? ""
], forDocument: newCommentRef)
return nil
}){(object, error) in
if let error = error{
debugPrint(error)
}else{
//ここに入ったということは、正常に保存されているはず
//テキストフィールドの値を空にしておいて、次の処理に備える
self.addCommentText.text = ""
}
}
}
ポイントは
Firebaseを利用すると、随分とチャットなどの開発が楽になると思いますし、モバイルファーストで新しいサービスは、Firebaseで先行開発する手法も広がるのでは無いかと個人的には思います。