将对象添加到字典中

时间:2016-09-30 21:49:52

标签: ios swift for-loop dictionary firebase

我尝试将2个对象添加到字典中,然后将其发送到Post类以获取照片Feed。这就是我所拥有的,我正在使用firebase。

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)

这个问题是,当我尝试使用setValue()将用户名和profileThumbUrl添加到postDict中的值时,我收到错误:&#34;此类与密钥用户名不符合密钥值编码。& #34;我在其他情况下使用过这种方法,所以我不知道是不是因为我正在使用&#34;如果让&#34;一开始因为我通常不会使用它。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

objectForKey返回一个可选类型,该类型不符合NSDictionary,因此您需要打开可选项以使其生效。

例如

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()

             })
         }
     }