请在Swift中对cellForRowAt进行代码审查

时间:2019-01-23 07:53:27

标签: swift uitableview

我有一个关于加速TableView的问题。 现在,我在cellForRowAt中编写以下代码。 但是,我想减轻重量以更快地处理它,您能给我建议吗?

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if let cell: BookListCell = tableView.dequeueReusableCell(withIdentifier: NSStringFromClass(BookListCell.self), for: indexPath) as? BookListCell {
        let book = books[indexPath.item]
        cell.title.text = book.name
        if let image = book.image {
            cell.bookimage.kf.indicatorType = .activity
            cell.bookimage.kf.setImage(with: URL(string: image))
        }
        if let price = book.price {
            cell.price.text = String(price)
        }
        if let purchaseDate = book.purchaseDate {
            cell.bookDay.text = purchaseDate
        }
        cell.editButton.setTitle(R.string.setting.editButton(), for: .normal)
        return cell
    }
    let cell = UITableViewCell()
    return cell
}

1 个答案:

答案 0 :(得分:1)

做起来不太快,但是您可以肯定会变得更漂亮! :)

尝试共享逻辑并遵守SOLID原则。

CellForRow函数

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if let cell: BookListCell = tableView.dequeueReusableCell(withIdentifier: NSStringFromClass(BookListCell.self), for: indexPath) as? BookListCell {
        cell.configureWithBook(books[indexPath.item])
        return cell
    }

    return UITableViewCell()
}

BookListCell配置公共功能

func configureWithBook(_ book: BookModel) {
        title.text = book.name
        if let image = book.image {
            bookimage.kf.indicatorType = .activity
            bookimage.kf.setImage(with: URL(string: image))
        }
        if let price = book.price {
            price.text = String(price)
        }
        if let purchaseDate = book.purchaseDate {
            bookDay.text = purchaseDate
        }
        editButton.setTitle(R.string.setting.editButton(), for: .normal)
}

此外,如果创建对象(例如UILabel),则应将其命名为yourNameLabel。类似于UIView-yourNameView。这是一条潜规则。

祝一切顺利! :)