首页 > 解决方案 > 错误:无法分配类型“字符串?”的值 键入“字符串?。类型”

问题描述

这段代码有几个问题。这是我的代码,我不明白为什么第 61 行出现错误,cell.userID = self.user[indexPath.row].userID上面写着:Cannot assign value of type String?to type 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()
    }
}

标签: iosxcodefirebase

解决方案


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

改变

var userID = String?.self

var userID : String?

推荐阅读