【发布时间】:2020-10-11 10:27:37
【问题描述】:
传输操作数据。错误是我无法访问第二个 TableView 中的变量。
错误:无法分配类型“Fav?”的值类型“[Fav]”和实例成员“getFav”不能用于类型“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?
@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?
}
}
第二个 TableViewVC
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!
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
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()
}
// FavouriteTableViewCell
class FavouriteTableViewCell: UITableViewCell {
@IBOutlet weak var name: UILabel!
@IBOutlet weak var price: UILabel!
@IBOutlet weak var favImage: UIImageView!
}
【问题讨论】:
-
不要在
DivanCell中添加favTapped方法,而是将其添加到ViewController,您可以使用按钮tag属性来识别索引并从数组中获取数据。然后您可以通过导航轻松传递此信息到FavouriteTableVC -
我的应用逻辑不一样。不用通过导航,我有tabBarController
-
在这里发布代码时要格式化,太混乱了。另外,
FavouriteTableViewCell声明在哪里?
标签: ios swift iphone xcode uitableview