提问者:小点点

按下按钮将数据从一个TableView传输到另一个TableView


传送操作数据。 错误是我无法到达第二个TableView中的变量。

错误:无法分配类型为“FAV?”的值 to类型“[Fav]”,实例成员“Get Fav”不能用于类型“FavouriteTableVc”; 您的意思是改用此类型的值吗?

结构数据

struct Fav {
    var image: UIImage?
    var name: String
    var price: String
    
    static let favName = ["Faaaak", "Dunc"]
    
    static func getFav() -> [Fav] {
        
        var favourites = [Fav]()
        
        for fav in favName {
            favourites.append(Fav(image: nil, name: fav, price: "29.000"))
        }
        return favourites
    }
}

第一表单元


class DivanCell: UITableViewCell {
    
    var fav: Fav?

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }
    @IBOutlet weak var divanNameLabel: UILabel!
    @IBOutlet weak var divanPhoto: UIImageView! 
    @IBOutlet weak var priceLabel: UILabel!
    @IBOutlet weak var sizeDivan: UILabel!
    @IBOutlet weak var favButton: UIButton!
    @IBAction func favTapped(_ sender: Any) {
        favButton.setImage(UIImage(systemName: "heart.fill"), for: UIControl.State.normal)
        favTapped(favNext: FavouriteTableVC())
    }
    
    func favTapped(favNext: FavouriteTableVC) {
        fav = Fav(image: divanPhoto.image, name: divanNameLabel.text!, price: priceLabel.text!)
        FavouriteTableVC.getFav = fav // Error: Cannot assign value of type 'Fav?' to type '[Fav]' and Instance member 'getFav' cannot be used on type 'FavouriteTableVC'; did you mean to use a value of this type instead?
    }
    
    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
        
        // Configure the view for the selected state
    }

}

第二个表viewvc


class FavouriteTableVC: UITableViewController {
    
    var getFav = Fav.getFav()

    override func viewDidLoad() {
        super.viewDidLoad()
        
    }

    @IBOutlet weak var favName: UILabel!
    @IBOutlet weak var favPrice: UILabel!
    @IBOutlet weak var favImage: UIImageView!
    // MARK: - Table view data source

    override func numberOfSections(in tableView: UITableView) -> Int {
        // #warning Incomplete implementation, return the number of sections
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        return getFav.count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "favouriteCell", for: indexPath) as! FavouriteTableViewCell

        let favs = getFav[indexPath.row]
               
        cell.name.text = favs.name
        cell.price.text = favs.price
        cell.favImage.image = favs.image
        tableView.reloadData()
        return cell
    }
    
    override func viewWillAppear(_ animated: Bool) {
        
        
        tableView.reloadData()
    }


共1个答案

匿名用户

代码中有两个错误正在导致错误。

无法分配类型为“FAV?”的值 当您试图将Fav?类型的对象分配给[Fav]时,会导致“[Fav]”类型。

实例成员“Get Fav”不能用于类型“FavouriteTableVc”; 您是否打算使用此类型的值?是因为您试图分配变量而不创建对象而导致的。

替换为具有以下代码的FavTapp(favNext:FavouriteTableVC)方法。 希望这能解决你的问题。

func favTapped(favNext: FavouriteTableVC) {
    if let tempFav = Fav(image: divanPhoto.image, name: divanNameLabel.text!, price: priceLabel.text!){
       favNext.getFav = tempFav 
       fav = tempFav
    }
}