错误:无法分配类型“字符串?”的值键入“字符串?。类型”

Posted

技术标签:

【中文标题】错误:无法分配类型“字符串?”的值键入“字符串?。类型”【英文标题】:Error: Cannot assign value of type 'String?' to type 'String?.Type' 【发布时间】:2018-10-23 12:20:07 【问题描述】:

这段代码有几个问题。这是我的代码,我不明白为什么在第 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】:

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

改变

var userID = String?.self

var userID : String?

【讨论】:

@CameronCharmanson 如果有帮助,accept 这个答案是合适的。 @CameronCharmanson 当然,收到正确答案的回应是删除原始问题。

以上是关于错误:无法分配类型“字符串?”的值键入“字符串?。类型”的主要内容,如果未能解决你的问题,请参考以下文章

无法分配“NSDictionary”类型的值?键入“字符串?”

Swift 无法将类型“()”的值分配给类型“字符串?”

键入'字符串 | ArrayBuffer' 不可分配给类型 'string'

尝试在 2 个控制器之间传递数据时,我收到错误无法分配类型“ViewController.Item?”的值键入“项目?”,

键入'键:字符串; ' 不可分配给类型 'Product' Angular 7

打字稿类型“数字”不可分配│键入“字符串”