2016-09-10 13 views
0

辞書にあるnewPet引数の構成要素でデータベースにデータを入れようとしている間に、func addPetにエラーContextual type AnyObject cannot be used within dictionary literalがあります。Swift、Firebase: `setValue`エラー" AnyObjectはディクショナリリテラルで使用できません "

import Foundation 
import Firebase 

struct Pet { 
    var name:String? 
    var type:String? 
    var age:Int? 
    var feedingList:[String] 
    var walkingList:[String] 
} 

struct User { 
    var currentId:String? 
    var numberOfPets:Int? 
    var pets:[Pet] 

} 

class petBrain { 

    var reff = FIRDatabaseReference() 
    var currentUser:User = User(currentId: "",numberOfPets: 0,pets: []) 

    init(){ 
     self.reff = FIRDatabase.database().reference() 
    } 

    func setUserId(cId:String?){ 
     self.currentUser.currentId = cId 
    } 

    func addPet(newPet:Pet) { 
     self.reff.child("pets").childByAutoId().setValue(["name":newPet.name, "type":newPet.type, "age":newPet.age, "fList":newPet.feedingList, "wList":newPet.walkingList]) 
    } 


} 

私はすでに

let em = emailTextField.text! 
    let us = usernameTextField.text! 

    ... 

else { 
    print("User created! Loging in.") 
    self.login() 
    // adding user to DB of users 
    self.ref.child("users").child(user!.uid).setValue(["email":em, "username":us]) 
} 

(エラーを生成しない)も同様に辞書の形でユーザーとその作業罰金のために、他のViewControllerでこれを行っている私は、ペットケースに間違って何をしたのですか?おそらくstructやstructの要素型によるものでしょうか?これらの2つの構造体は明確に定義されていますか?

+0

あなたはswift3でコーディングされていますか? – Dravidian

+0

いいえ、Swift2、なぜですか? – NikolaM

答えて

0
  • ?将来的に値がnilになる場合はが使用されます。
  • が実際にはnilにならない場合は使用されますが、最初はnilにする必要があります。

変数を宣言すると、Swiftは厳密に型指定された言語です。あなたはタイプがnilであると言っています。だから、辞書は何の値を格納するのかわからない。

var myVar:String? // myVarを見て、あなたとあなたのタイプは今のところ完全にnilです

var myVar:String! // myVarを見て、あなたの価値が今のようnilですが、あなたのタイプはString

のは確かであるだけで、このようにコードを変更します -

 struct Pet { 
     var name:String! 
     var type:String! 
     var age:Int! 
     var feedingList:[String] 
     var walkingList:[String] 
    } 

    struct User { 
     var currentId:String? 
     var numberOfPets:Int? 
     var pets:[Pet] 

    } 

    class petBrain { 

     var reff = FIRDatabaseReference() 
     var currentUser:User = User(currentId: "",numberOfPets: 0,pets: []) 

     init(){ 
      self.reff = FIRDatabase.database().reference() 
     } 

     func setUserId(cId:String?){ 
      self.currentUser.currentId = cId 
     } 

     func addPet(newPet:Pet) { 

      let dict = ["name":newPet.name, "type":newPet.type, "age":newPet.age, "fList":newPet.feedingList, "wList":newPet.walkingList] 

      self.reff.child("pets").childByAutoId().setValue(dict) 
     } 


    } 
+0

ありがとう!そして素敵な説明、私はそれを得た! – NikolaM

+0

私は自分の答えを更新しました。他のユーザーが簡単にナビゲートできるように、提案された編集内容を承認してください... – Dravidian

関連する問題