#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
}
}