2016-09-30 7 views
0

Ich versuche, einem Wörterbuch zwei Objekte hinzuzufügen, bevor es an eine Post-Klasse für einen Foto-Feed gesendet wird. Das ist was ich habe, ich benutze Firebase.Hinzufügen von Objekten zu einem Wörterbuch

if let postDict = snap.value as? Dictionary<String, AnyObject> { 

     for(name, value) in postDict { 
      if name == "postedBy" { 

       DataService.ds.REF_USERS.child(value as! String).observeSingleEventOfType(.Value, withBlock: { (friendDictionary) in 

        let userDict = friendDictionary.value as! NSDictionary 
        value.setValue(userDict.objectForKey("username"), forKey: "username") 
        value.setValue(userDict.objectForKey("profileThumbUrl"), forKey: "profileThumbUrl") 
        self.collectionView?.reloadData() 

       }) 
      } 
     } 

     let key = snap.key 
     let post = Post(postKey: key, dictionary: postDict) 
     self.posts.append(post) 

Das Problem dabei ist, dass, wenn ich Benutzer setValue versuchen() Benutzernamen und profileThumbUrl an Wert hinzufügen in postDict ich den Fehler: „diese Klasse nicht Schlüsselwert ist Codierung-konform für den Schlüssel Benutzernamen ein. " Ich habe diese Art von Methode in anderen Situationen verwendet, also weiß ich nicht, ob es daran liegt, dass ich "If Let" am Anfang verwende, weil ich das normalerweise nicht verwende. Irgendwelche Ideen?

+0

Was ist der Typ für 'value'? – rmaddy

+0

Haben Sie versucht, das if let nicht zu verwenden? –

+0

Ich denke, Wert ist anyobject –

Antwort

1

objectForKey gibt einen optionalen Typ zurück, der nicht für ein NSDictionary konform ist, daher müssen Sie das optionale dafür auspacken.

Eg

for(name, value) in postDict { 
     if name == "postedBy" { 

      DataService.ds.REF_USERS.child(value as! String).observeSingleEventOfType(.Value, withBlock: { (friendDictionary) in 

       let userDict = friendDictionary.value as! NSDictionary 

       guard let username = userDict.objectForKey("username") else { continue } 
       guard let profileThumbURL = userDict.objectForKey("profileThumbUrl") else { continue } 

       value.setValue(username, forKey: "username") 
       value.setValue(profileThumbUrl, forKey: "profileThumbUrl") 
       self.collectionView?.reloadData() 

      }) 
     } 
    } 
Verwandte Themen