2017-06-16 29 views
-1

继稍微过时的教程,并有错误时:类型“任何”无标会员火力地堡,然后导致崩溃改变

类型“任何”无标会员

let username = snapshot.value!["username"] as! String 
let profileImageURL = snapshot.value!["profileImageURL"] as! String 
let uid = snapshot.value!["uid"] as! String 

我试着列出的类型'Any'没有下标成员(firebase),但它会导致崩溃。

我改变了代码以下的建议:

let username = (snapshot.value as? NSDictionary)?["username"] as? String 
let profileImageURL = (snapshot.value as? NSDictionary)?["profileImageURL"] as? String 
let uid = (snapshot.value as? NSDictionary)?["uid"] as? String 

也:我已经通过几个相关问题搜索

if let test = snapshot.value! as? [String:Any]{ 

let username = test["username"] as? String 
let profileImageURL = test["profileImageURL"] as? String 
let uid = test["uid"] as? String 

     } 

但是一切都只是导致系统崩溃。

全码:

import Foundation 
import UIKit 
import Firebase 
import FirebaseStorage 
import FirebaseDatabase 

struct user { 

    let username : String! 
    let profileImageURL : String! 
    let uid : String! 
} 

class ProfileVC: UITableViewController { 


    var users = [user]() 


    override func viewDidLoad() { 

     let databaseRef = FIRDatabase.database().reference() 


     databaseRef.child("Users").queryOrderedByKey().observe(.childAdded, with: { 
      snapshot in 

      print("snapshot") 

      if let snapshots = snapshot.children.allobjects as? [FIRDataSnapshot] { 
       for snap in snapshots { 
        let username = snapshot.value!["username"] as! String 
        let profileImageURL = snapshot.value!["profileImageURL"] as! String 
        let uid = snapshot.value!["uid"] as! String 
       } 
      } 




      self.users.append(user(username: username, profileImageURL: profileImageURL, uid: uid)) 


      self.tableView.reloadData() 

     }) 

    } 


    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return users.count 

    } 

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 


     let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") 

     let imageView = cell?.viewWithTag(1) as! UIImageView 
     imageView.alpha = 0 


     let nameLbl = cell?.viewWithTag(2) as! UILabel 
     nameLbl.alpha = 0 
     nameLbl.text = users[indexPath.row].username 




     let imageData = try? Data(contentsOf: URL(string: self.users[indexPath.row].profileImageURL)!) 
     imageView.image = UIImage(data: imageData!) 
     nameLbl.text = self.users[indexPath.row].username 

     DispatchQueue.main.async(execute: { 
      UIView.animate(withDuration: 0.5, animations: { 

       imageView.alpha = 1 
       nameLbl.alpha = 1 

      }) 
     }) 


     return cell! 
    } 

} 
+0

当时的错误在这条线?'让用户名= snapshot.value![“用户名”]作为!String'我怀疑这三种。 –

+0

错误是在每一个3升ines –

回答

0
let databaseRef = FIRDatabase.database().reference() 

databaseRef.child("Users").observe(.value, with: { snapshot in 

print("snapshot") 

if let snapshots = snapshot.children.allobjects as? [FIRDataSnapshot] { 

    for snap in snapshots { 
     let uid = snap.key 
     if let username = snap.value["username"] as? String, let profileImageURL = snap.value["profileImageURL"] as? String { 
     let user = User(username: username, profileImageURL, uid:uid) 
     self.users.append(user) 
     } 
    } 
} 

     self.tableView.reloadData() 

    }) 
+0

哪个关键和价值? –

+0

我认为这个快照来自您的数据库引用中的observeEvent或observeSingleEvent函数,并且完成处理程序有一个快照:[FIRDataSnapshot] –

+0

是observeperEvent是正确的 –

-1

让databaseRef = FIRDatabase.database()参考() databaseRef.child( “用户”)queryOrderedByKey()观察(.childAdded,与。: { 快照

 print("snapshot") 

     let udic = snapshot.value as! [String: AnyObject] 

     let username = udic["username"] as! String 
     let profileImageURL = udic["profileImageURL"] as! String 
     let uid = udic["uid"] as! String 

     self.users.append(user(username: username, profileImageURL: profileImageURL, uid: uid)) 

     self.tableView.reloadData() 

    })