Есть ли какое-либо преимущество в том, чтобы сделать защитный пропуск в ячейке таблицы или нет? - PullRequest
0 голосов
/ 29 марта 2020

Я видел, как люди пишут этот код внутри делегата табличного представления

override func tableView(_ tableView: UITableView,
                      cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    guard let cell = tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as! SuitCell? else {
      fatalError()
    }
  ...
}

, теперь рассматривают этот другой код

  override func tableView(_ tableView: UITableView,
                          cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as! SuitCell

    ...
}

Не будут ли оба кода одинаковыми * sh линии, если ячейка не удалена из очереди?

Есть ли разница? Я не вижу этого.

1 Ответ

1 голос
/ 29 марта 2020

dequeueReusableCell(withIdentifier:) может вернуть nil в случае, когда в пуле повторного использования нет ячеек (т. Е. При первом отображении таблицы). Когда он возвращает nil, вы несете ответственность за создание экземпляра ячейки соответствующего типа.

Следовательно, этот блок кода:

guard let cell = tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as! SuitCell? else {
  fatalError()
}

говорит: «Если вы получаете ячейку из пула повторного использования, и она не является экземпляром SuitCell, cra sh, но nil в порядке "(обратите внимание на приведение к необязательному)

Пока этот блок кода:

let cell = tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as! SuitCell

Говорит" Cra sh, если вы не получите экземпляр SuitCell, или youn nil ", поэтому при первом отображении таблицы будет получено sh.

dequeueReusableCell(withIdentifier:) на самом деле больше не используется. Вы бы использовали более новый (но все еще существует с iOS 6) вариант dequeueReusableCell(withIdentifier:,for:), так как он всегда возвращает ячейку, и вы можете ожидать, что это будет правильный класс (или вы быстро найдете свою проблему) в процессе разработки):

let cell = tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier, for: indexPath) as! SuitCell
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...