Ответ может быть основан на мнении, но я действительно не вижу никаких аргументов в пользу использования второго подхода «стандартной версии».
Это выходит за рамки MVC, но вы должны держать свой интерфейс publi c закрытым насколько возможно, выставляйте только те свойства, которые имеют смысл. Поэтому используйте private
в большинстве случаев.
Поэтому в вашей ячейке я предлагаю
@IBOutlet private var quantityLabel: UILabel!
@IBOutlet private var productNameLabel: UILabel!
Вы можете сохранять weak
, хотя это и не нужно. Вы также можете использовать дополнительные параметры вместо принудительно развернутых значений quantityLabel: UILabel?
вместо quantityLabel: UILabel!
для улучшения стабильности.
Так что, как только у вас есть внутренние детали, вам нужно проверить, как открыть ваш интерфейс. У этого все еще есть многократные образцы; один из них - то, что вы использовали, ваша ячейка не сохраняет объект, который вы вводите, а просто изменяет его визуальное представление. Другой будет выглядеть так:
class NeedProductsTableViewCell: UITableViewCell {
@IBOutlet private var quantityLabel: UILabel?
@IBOutlet private var productNameLabel: UILabel?
var item: (quantity: String, name: String)? {
didSet {
if let item = item {
quantityLabel?.text = item.quantity
quantityLabel?.textColor = .systemGray
quantityLabel?.font = quantityLabel.font.withSize(14)
productNameLabel?.text = item.name
productNameLabel?.font = UIFont.boldSystemFont(ofSize: 14)
}
}
}
В этом случае вы будете использовать в своем источнике данных:
cell.item = (quantityProducts[indexPath.row], productsArray[indexPath.row])
Это также предполагает, что у вас должен быть только 1 массив, если это возможно. Либо использовать структуру для инкапсуляции обоих значений, либо просто использовать кортежи:
private var items: [(quantity: String, name: String)] = []
вместо
private var quantityProducts: [String] = []
private var productsArray: [String] = []