Firebase
[swift3.0] Firebase、JSQMessagesを使う
[環境]
Xcode:8.0
Swift:3.0
こんばんわ。
Firebase、JSQMessageを使うサンプルはネット上にたくさんありますが、
swift3のサンプルではないですし、pods経由でもFirebaseもVersion upしています。
・swift3の問題なのか?
・Firebaseが問題なのか?
・swift3とFirebaseの相性がまだ悪いのか?
原因の特定が難しいですね。。。
仕方ないので、Google codelabsを1から読みました。swift3対応してくれていました。
結構はまったので、特にはまったポイントだけ記載します。
swift2でFirebaseのセッティング
1 2 3 4 5 6 7 8 9 10 11 |
func setFirebase() { let rootRef = FIRDatabase.database().reference() rootRef.queryLimitedToLast(100).observeEventType(FIRDataEventType.ChildAdded, withBlock: { (snapshot) in let text = snapshot.value!["text"] as! String let sender = snapshot.value!["from"] as! String let name = snapshot.value!["name"] as! String let message = JSQMessage(senderId: sender, displayName: name, text: text) self.messages?.append(message) self.finishReceivingMessage() }) } |
swift3でFirebaseのセッティング
1 2 3 4 5 6 7 8 9 10 11 12 |
func setFirebase() { let rootRef = FIRDatabase.database().reference() rootRef.queryLimited(toLast: 100).observe(FIRDataEventType.childAdded, with: { (snapshot) in let snapshotValue = snapshot.value as! NSDictionary let text = snapshotValue["text"] as! String let sender = snapshotValue["from"] as! String let name = snapshotValue["name"] as! String let message = JSQMessage(senderId: sender, displayName: name, text: text) self.messages?.append(message!) self.finishReceivingMessage() }) } |
微妙ですが、結構違うので困りました。
100%の正解ではないと思いますが、とりあえず動くのでアップします。
swift2でFirebaseへ格納
1 2 3 4 5 6 7 8 |
func sendTextToDb(text: String) { let rootRef = FIRDatabase.database().reference() let post = ["from": senderId, "name": senderDisplayName, "text": text] let postRef = rootRef.childByAutoId() postRef.setValue(post) } |
swift3でFirebaseへ格納
1 2 3 4 5 6 7 8 |
func sendTextToDb(text: String) { let rootRef = FIRDatabase.database().reference() let post:Dictionary<String, Any>? = ["from": senderId, "name": senderDisplayName, "text": text] let postRef = rootRef.childByAutoId() postRef.setValue(post) } |
兎にも角にも、型キャスティング系のトラブルが多いですね。。。
FirebaseがDBへの格納を受け付けてくれるためにも、swift3の正しい?型が必要なようです。
取り急ぎですが、誰かの助けになると幸いです!
村本訓一
http://kunikazumuramoto.com株式会社lord代表。WEBデザイナー⇒ディレクター⇒プロデューサーです。2010年から起業しています。社会に出てからずっとWEB屋です。 新しいネットサービス、デバイス、コミック、本、映画好きです。最近は急にプログラマーっぽい事もやってます。