错误:无法分配类型为'String'的值?键入“ String?.Type”

时间:2018-10-23 12:20:08

标签: ios xcode firebase

此代码有几个问题。这是我的代码,我不明白为什么在错误行61中带有cell.userID = self.user[indexPath.row].userID的内容:无法将类型String?的值分配给类型String?.Type。可能是因为第36行:if let uid = value["profilepicture.userID"] as? StringuserID在Firebase中是个人资料图片的子级,但我不知道如何在value[]内写该图片。感谢您的回答。

// TableViewCell.swift
import UIKit

class FriendsTableViewCell: UITableViewCell {

@IBOutlet weak var userImage: UIImageView!
@IBOutlet weak var nameLabel: UILabel!

var userID = String?.self

}




// ViewController.swift
import UIKit
import Firebase

class FriendsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet weak var tableview: UITableView!

    var user = [User]()

    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

    func retrieveUsers() {
        let ref = Database.database().reference()
        ref.child("users").queryOrderedByKey().observeSingleEvent(of: .value, with: { DataSnapshot in

            let users = DataSnapshot.value as! [String: AnyObject]
            self.user.removeAll()
            for (_, value) in users{
                //let uid = Auth.auth().currentUser!.uid
                if let uid = value["profilepicture.userID"] as? String{
                    if uid != Auth.auth().currentUser!.uid {
                        let userToShow = User()
                        if let fullName = value["username"] as? String , let imagePath = value["profilepicture.photoURL"] as? String {
                            userToShow.username = fullName
                            userToShow.imagePath = imagePath
                            userToShow.userID = uid
                            self.user.append(userToShow)
                        }
                    }

                }
            }

        })

    }

    func numberOfSections(in tableView: UITableView) -> Int {
        return  1
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
        let cell = tableview.dequeueReusableCell(withIdentifier: "FriendsTableViewCell", for: indexPath) as! FriendsTableViewCell

        cell.nameLabel.text = self.user[indexPath.row].username
        cell.userID = self.user[indexPath.row].userID
        cell.userImage.downloadImage(from: self.user[indexPath.row].imagePath!)


        return cell
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return user.count ?? 0
    }

}

extension UIImageView{

    func downloadImage(from imgURL: String!) {
        let url = URLRequest(url: URL(string: imgURL)!)

        let task = URLSession.shared.dataTask(with: url) { (data, response, error) in

            if error != nil{
                print(error)
                return
            }

            DispatchQueue.main.async {
                self.image = UIImage(data: data!)
            }
        }
        task.resume()
    }
}

1 个答案:

答案 0 :(得分:1)

  

无法分配字符串类型的值?键入String?.Type。

更改

var userID = String?.self

收件人

var userID : String?