1 - вместо тегов
if let activity = cell.viewWithTag(103) as? UIActivityIndicatorView {
создать IBOutlet
для каждого элемента пользовательского интерфейса внутри пользовательского класса ячейки с приведением ячейки
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "PageCell", for: indexPath)
as! PageCell
2 - не нужно DispatchQueue.main.async
в
DispatchQueue.main.async {
if let pageLabel = cell.viewWithTag(101) as? UILabel {
, поскольку код cellForRowAt
по умолчанию выполняется в основной очереди
3 - вместо тяжелой работы с загрузкой образа .cache используйте SDWebImage
image.sd_setImage(with: URL(string:self.Networking.fetchedPagesURLs.reversed()[indexPath.row])!), placeholderImage: UIImage(named: "placeholder.png"))