Почему я получаю эту ошибку в своем кодовом значении типа «CategoryCell», в котором нет элемента «Просмотры обновлений»

#ios #swift

Вопрос:

 import Foundation
class DataService {
    static let instance = DataService()
        
        private let categories = [
            Category(title: "SHIRTS", imageName: "shirts.png"),
            Category(title: "HOODIES", imageName: "hoodies.png"),
            Category(title: "HATS", imageName: "hats.png"),
            Category(title: "DIGITAL", imageName: "digital.png")
        ]
    
    func getCategories() -> [Category] {
        return categories
      }
    }
 

на мой взгляд, это

 import UIKit

class CategoryCell: UITableViewCell {

    @IBOutlet weak var categoryImage: UIImageView!
    @IBOutlet weak var categoryTitle: UILabel!
    
    func updatViews(category: Category) {
        categoryImage.image = UIImage(named: category.imageName)
        categoryTitle.text = category.title
    }

}
 

моя модель

 import Foundation

struct Category {
    private(set) public var title: String
    private(set) public var imageName: String
    
    init(title: String, imageName: String) {
        self.title = title
        self.imageName = imageName
    }
}
 

И мой контроллер

 import UIKit

class CategoriesVC: UIViewController, UITableViewDataSource, UITableViewDelegate {
    
    @IBOutlet weak var categoryTable: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()
        categoryTable.dataSource = self
        categoryTable.delegate = self
       
    }
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) ->Int{
        return DataService.instance.getCategories().count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        if let cell = tableView.dequeueReusableCell(withIdentifier: "CategoryCell") as? CategoryCell {
            let category = DataService.instance.getCategories()[indexPath.row]
            cell.updateViews(category: category)
            return cell
        } else{
            return CategoryCell()
        }
    }
    

}
 

Комментарии:

1. cell.updateViews(category: category) , таким образом, метод назван func updateViews(category: SomeClass) , и у вас есть func updatViews(category: Category) . Это опечатка. Всегда позволяйте автозаполнению Xcode помогать вам в этих случаях, чтобы увидеть, нет ли такой небольшой опечатки.

2. Я попробовал функцию обновления просмотров(категория: Категория), это не сработало

3. Вы имеете в виду, что исправили опечатку (пропущена буква «е») в func updatViews(category: Category) { ? Или что вы позволили Xcode помочь с автозаполнением? Печатаете cell.upd , и пусть предложение?

4. ух ты! поэтому я позволил Xcode завершить его за меня, и это сработало.. Огромное спасибо!

5. НО вы также можете исправить имя своего метода updatViews => > updateViews , это имеет больше смысла…

Ответ №1:

Возможно, приведенный ниже код будет вам полезен

Ваша Модель
 import Foundation

struct Category {
    private(set) public var title: String
    private(set) public var imageName: String
    
    init(title: String, imageName: String) {
        self.title = title
        self.imageName = imageName
    }
}
 
Ваша Служба Передачи Данных
 import Foundation

class DataService {
    static let instance = DataService()
    
    private let categories = [
        Category(title: "SHIRTS", imageName: "shirts.png"),
        Category(title: "HOODIES", imageName: "hoodies.png"),
        Category(title: "HATS", imageName: "hats.png"),
        Category(title: "DIGITAL", imageName: "digital.png")
    ]
    
    func getCategories() -> [Category] {
        return categories
    }
}
 
Ваша ячейка просмотра таблицы
 import UIKit

class CategoryCell: UITableViewCell {

    @IBOutlet weak var categoryImage: UIImageView!
    @IBOutlet weak var categoryTitle: UILabel!
    
    func updateViews(category: Category) {
        categoryImage.image = UIImage(named: category.imageName)
        categoryTitle.text = category.title
    }
}
 
Ваш Контроллер Просмотра
 import UIKit

class CategoriesVC: UIViewController, UITableViewDataSource, UITableViewDelegate {
    
    @IBOutlet weak var categoryTable: UITableView!

    var categories = [Category]()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        categoryTable.dataSource = self
        categoryTable.delegate = self
        
        self.categories = DataService.instance.getCategories()
    }
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) ->Int{
        return self.categories.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
        let cell = tableView.dequeueReusableCell(withIdentifier: "CategoryCell") as? CategoryCell ?? CategoryCell()
        let category = DataService.instance.getCategories()[indexPath.row]
        cell.updateViews(category: category)
        return cell
    }
}