2017-08-24 4 views
1

私はswift 3とfirebaseを使用してアプリケーションを構築しています。データベースから金額を引き出し、減算して金額を更新したいと思います。再び火災基地。私はあなたのファイヤーベースのデータ構造で以下のような機能を持っています。firebaseから金額の値を取得し、swiftを使用して減算と更新を行います。3

機能:

func updateBal(cred: String){ 
    //creating artist with the new given values 

    if (cred != "") { 
     let credit = ["credits": cred] 
     let newCredit = credit as! Int 
     let bal = newCredit - 1 

     //let newBalanceString: [AnyHashable: Any] = [:] 
     //let newBalanceString: [AnyHashable: Any] = [AnyHashable(bal): "/(bal)"] 

     let newBalanceString = String(format:"%.2f", bal) 
     ref.child("users").child(self.user.uid).child("creditdetails").childByAutoId().updateChildValues(newBalanceString) 

     //displaying message 
     //LabelMessage.text = "Balance Updated!" 
    } 
} 

データ構造

Data Structure

私は、このライン上のアプリのクラッシュを[AnyHashable: Any]と行のコメントを解除:

let newCredit = credit as! Int 

しかし、私はコメントしますとラインを外しては、私はライン上のエラーを取得する:

ref.child("users").child(self.user.uid).child("creditdetails").childByAutoId().updateChildValues(newBalanceString) 

エラーは言う:

予想引数の型にString型の値を変換できません[AnyHashable:任意]

がもらえますしてください。私がこの問題をどのように解決できるかについて私に正しい方向で指摘してください。

答えて

0

let newCredit = credit as! Intは常にエラーになります。ディクショナリ型をInt型に変換することはできません。 intとしてクレジットを取得するには、あなたはそのようにそれを行うことができます:あなたのcred値はintとして取得されたよう

if let newCredit = Int(cred) { 
    let bal = newCredit - 1 
} 

、あなたは直接のように自分の辞書を作成することができ、%.2f また、型を指定する必要はありませんキーとしての「クレジット」文字列は常にこの値です):

if let newCredit = Int(cred) { 
    let bal = newCredit - 1 

    let newBalanceString = ["credits" : bal] 
    ref.child("users").child(self.user.uid).child("creditdetails").childByAutoId().updateChildValues(newBalanceString) 
} 
+0

こんにちはダミアン私はあなたの提案が好きでしたが、まだファイアベースを差し引いていません。私はそれが動作するように感じることはできません。それが動作するように別の回避策がありますか? –

+0

もうエラーがなければ、それはスタートです。 Firebaseのアップデートが表示されません。あなたのfirebaseルール(autorisations)を見て、正確にあなたのアプリから送信されているものを確認してください。 –

関連する問題