Есть ли смысл отменять регистрацию ячеек для повторного использования в TableView / CollectionView? - PullRequest
0 голосов
/ 27 февраля 2019

Я делаю тонкие настраиваемые подклассы TableView и CollectionView с несколькими функциями качества жизни, такими как автоматическая регистрация ячеек для повторного использования, поэтому мне не нужно каждый раз создавать этот код для остальной частимоя жизнь.

Я генерирую cellIdentifiers на ходу и регистрирую их.Я подумал: «Почему бы также не внедрить автоматическую отмену регистрации», потому что ячейка, очевидно, может быть перезагружена, чтобы никогда не возвращаться.Но я не могу на самом деле узнать, как ..

На основании документации о регистрации ячеек для tableView и collectionView , он говорит следующее:

Вы можете указать nil для nib, если хотите отменить регистрацию файла nib по указанному идентификатору повторного использования.

Однако, если я (в моем подклассе UICollectionView) попытаюсь использовать self.register(nil, forCellWithReuseIdentifier: identifier) Я получаю ошибку

Ambiguous use of 'register(_:forCellWithReuseIdentifier:)'

Я понятия не имею, почему, но я думаю, что это может быть потому, что обе эти функции:

register(_ cellClass:AnyClass?, forCellWithReuseIdentifier:String)
register(_ nib:UINib?, forCellWithReuseIdentifier:String)

они неоднозначны, когдапопытка передать nil в качестве первого параметра.

Итак - что на самом деле ожидает от меня документация?Могу ли я бросить ноль на что-нибудь, чтобы помочь выбрать любой из них?И - действительно ли необходима регистрация?Я никогда не делал этого раньше, и я не мог найти много онлайн об этом .. Сколько стоит «регистрация» сотовой ячейки?Я предполагаю, что на самом деле «отменить регистрацию» ячейки будет дороже, чем просто оставить ее зарегистрированной, поскольку отмена регистрации будет реальной операцией - но я могу ошибаться здесь ..

Я понимаючто я могу зарегистрировать разные ячейки с одним и тем же идентификатором, что в сущности отменит предыдущую регистрацию, но если я уверен на 100%, что никогда не буду использовать один и тот же идентификатор для разных ячеек, нужно ли мне отменять регистрацию?

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Вы можете уменьшить nil до UINib?, чтобы сообщить компилятору, на какой register вы ссылаетесь:

self.register(nil as UINib?, forCellWithReuseIdntifier: identifier)
0 голосов
/ 27 февраля 2019

В своей жизни я никогда не регистрировал многократно используемую ячейку, поэтому я не знаю, стоит ли она того или нет, но если вы действительно этого хотите, вам придется быть более конкретным с вашим кодом.Вы правы в том, что он не может правильно интерпретировать метод.

tableView.register(Optional<UINib>.none, forCellReuseIdentifier: "cheese")

Позволит компилятору определить, какой из двух методов вы используете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...