2016-10-17 10 views
0

Xcodeをバージョン8にアップデートしましたが、今Firebaseに問題があります。SwiftのFirebase構文3

let target = snapshot.value!["target"] as! NSDictionary 
self.myZodiac.text = snapshot.value!["zodiac"] as! String 
let nsHeight = snapshot.value!["height"] as! NSNumber 

//タイプ「どれが」は添字メンバースウィフト2.3この作品の全てにおいて

を持っていない:これは、コードの一部です!どのようにそれを修正するには?

つ以上:

var messagesDictionary = [[String:Int]]() 
userRef.observe(FIRDataEventType.value, with: { (snapshot) in 

    for item in snapshot.children.allObjects { 
     for itemDic in self.messagesDictionary { 
      for (key,value) in itemDic { 
       if (item as AnyObject).key == key { 
        var photo = UIImage() 
        let age = (item as AnyObject).value!["age"] as! NSNumber as Int //error Type 'Any' does not conform to protocol 'AnyObject' 
        let name = (item as AnyObject).value!["name"] as! String //error Type 'Any' does not conform to protocol 'AnyObject' 
        if (item as AnyObject).hasChild("avatar"){ 
         let avatar = (item as AnyObject).value!["avatar"] as! String //error Type 'Any' does not conform to protocol 'AnyObject' 
         self.storageRef.child(key).child(avatar).data(withMaxSize: 5 * 1024 * 1024, completion: { (data, error) -> Void in 
         if (error != nil) { 

         } else { 
          photo = UIImage(data:data!)! 

         } 
         }) 
         //// 
         }else{ 
          photo = UIImage(named: "no_avatar")! 


        } 

       } 

      } 
     } 
    } 


}) 

最初の例で私が使用:

let target = (snapshot.value as? NSDictionary)?["target"] as! NSDictionary 
self.myZodiac.text = (snapshot.value as? NSDictionary)?["zodiac"] as! String 
let nsHeight = (snapshot.value as? NSDictionary)?["height"] as! NSNumber 

今のコードの第二片からANYOBJECTとしてアイテムをどうしますか?

答えて

1

FIRDataSnapshot.valueのタイプはAnyなので、単純に添字にすることはできません。

ソリューションは、最初の辞書に値をダウンキャストすることです:

ref!.observe(.value, with: { (snapshot) in 
    for child in snapshot.children { 
     let msg = child as! FIRDataSnapshot 
     print("\(msg.key): \(msg.value!)") 
     let val = msg.value! as! [String:Any] 
     print("\(val["name"]!): \(val["message"]!)") 
    } 
}) 

をここに私の答えから: Ambiguous Use of Subscript (Swift 3)

+0

を'child in snapshot.children'と' child in snapshot.children.allObjects' - 違いは何ですか? – fatfrog

0

このお試しください: - 私は、人々が使用見てきた

if let snapDict = snapshot.value as? [String:AnyObject]{ 

    let target = snapDict["target"] as! [String:AnyObject] 
    self.myZodiac.text = snapDict["zodiac"] as! String 
    let nsHeight = snapDict["height"] as! Float 

     } 
関連する問題