2016-11-08 34 views
0

私はFirebase、Backendless、Swiftを使ってチャットアプリを構築するためにUdemyのコースを行っています。すべての問題(それはSwift 2のために書かれたものではありません)私は自分自身を解決することができましたが、これは私を困惑させます。この関数はFirebaseデータベースからデータを取得するはずですが、明らかにNSArrayとして取得することになっていましたが、NSDictionaryとして取得するようになりました。これは他の関数の巨大なリストを作成しています。辞書。動作しませんas! NSArrayを使用して、もちろんFirebase(Swift 3)からNSArrayとしてデータを取得して読み込みます。

func loadRecents() { 
    ref = FIRDatabase.database().reference() 
    let userId = currentUser?.getProperty("username") as! String 
    ref.child("Recent").queryOrdered(byChild: "userId").queryEqual(toValue: userId).observe(.value, with: { 
     snapshot in 
     self.recents.removeAll() 
     if snapshot.exists() { 
      let values = snapshot.value as! NSDictionary 
     } 
    }) 
} 

func loadRecents() { 
firebase.childByAppendingPath("Recent").queryOrderedByChild("userId").queryEqualToValue(currentUser.objectId).observeEventType(.Value, withBlock: { 
     snapshot in 
     self.recents.removeAll() 
     if snapshot.exists() { 
      let sorted = (snapshot.value.allValues as NSArray).sortedArrayUsingDescriptors([NSSortDescriptior(key: "date", ascending: false)]) 
     } 
    }) 
} 

私は限りスウィフト3に更新しました。これを更新してSwift 3を使用し、データの値でソートし、後でそれにアクセスできるようにする方法を誰かが提案することができれば、非常に感謝しますか?ありがとう!

答えて

2
func loadRecents() { 
ref = FIRDatabase.database().reference() 
let userId = currentUser?.getProperty("username") as! String 
ref.child("Recent").queryOrdered(byChild: "userId").queryEqual(toValue: userId).observe(.value, with: { 
    snapshot in 
    self.recents.removeAll() 
    if snapshot.exists() { 
     let values = snapshot.value as! [String:AnyObject] 
    } 
})} 

かがこのコードを試してみてください、あなたを助けるもlet values = snapshot.value as! [Any]

+0

が、これは助け、ありがとう、私は私がであることをより多くの研究を行ってからご覧くださいsnapshot.childrenの子のために ' myvalue = child.value [" my value "]を!文字列 } 'または子ノードを櫛でくくるようなもの。しかし、これを実行すると、「NSFastEnumerationIteratorに要素値はありません」と表示され、それをAnyObjectにキャストすることが示唆されていますが、もちろんこれも機能しません。あなたはこの作品を作る方法を知っていますか? –

+0

@EthanTまず、 "子"の戻り値の型をデバッグモードでチェックする必要があります – ItsMeMihir

1

希望を使用することができます。

func loadRecents() { 
    let ref = FIRDatabase.database().reference() 
    let userId = currentUser?.getProperty("username") as! String 
    ref.child("Recent").queryOrdered(byChild: "userId").queryEqual(toValue: userId).observe(.value, with: { 
     snapshot in 
     self.recents.removeAll() 
     guard let mySnapshot = snapshot.children.allObjects as? [FIRDataSnapshot] else { return } 
     for snap in mySnapshot { 
      if let userDictionary = snap.value as? [String: Any] { 
       print("This is userKey \(snap.key)") 
       print("This is userDictionary \(userDictionary)") 
      } 
     } 
    }) 
} 
関連する問題