Comment utiliser DiffableDataSource et toujours prendre en charge iOS 12

Online Coding Courses for Kids

Comment utiliser ‘DiffableDataSource’ tout en prenant en charge iOS 12

Meilleures vues de collection avec compatibilité descendante

Oui, vous pouvez toujours prendre en charge les anciens téléphones. (Photo par Bagus Hernawan sur Unsplash.)

introduction

Si vous faites un usage intensif des tableaux et des vues de collection, iOS 13 a apporté quelque chose de génial pour vous – DiffableDataSource. Si vous ne le connaissez pas, n’hésitez pas à lire mon (excellent!) Tutoriel sur la façon de l’implémenter dans votre projet.

Quoi qu’il en soit, en bref – DiffableDataSource est un moyen de rafraîchir vos collections, tandis que tous les calculs sales d’insertion / suppression / mise à jour sont effectués pour vous par UIKit.

Sonne bien, quelle est la capture?

DiffableDataSource nécessite iOS 13. C’est le problème.

Collections (quand je dis collection, Je veux dire UITableView ou UICollectionView) sont un composant central de nos applications, et vous ne pouvez pas ignorer les utilisateurs d’iOS 12 en leur montrant simplement autre chose à la place. L’implémentation de DiffableDataSource est trop facile et utile pour attendre 1 à 2 ans avant de commencer à l’utiliser.

C’est pourquoi il n’est pas si simple de revenir à ‘reloadData ()’

C’est la pensée intuitive et logique – pourquoi ne pouvons-nous pas simplement vérifier la version iOS et appeler reloadData ()? Après tout, les utilisateurs qui ont peur de mettre à niveau mériteraient une expérience plus moche!

La racine du problème réside dans la source de données elle-même.

Vous voyez, pour utiliser DiffableDataSource, vous devez conserver la source de données diffiables en tant que variable d’instance.

Et lorsque vous avez une classe avec une variable qui nécessite iOS 13 – toute la classe nécessite iOS 13.

En d’autres termes, vous ne pouvez pas faire quelque chose comme ça:

importer UIKit

classe MyTableViewController: UIViewController {

@disponible (iOS 13.0, *)

var source de données: UITableViewDiffableDataSource?

}

Et si toute la classe nécessite iOS 13, cela signifie que vous devez dupliquer votre classe ou sous-classe – ou trouver une autre solution sanglante.

Je suppose que je vais devoir attendre jusqu’à l’année prochaine…

Ne pars pas encore! Il existe une solution, et elle est beaucoup plus simple que vous ne le pensez.

Marquez votre variable de source de données comme paresseuse et vous pouvez la limiter à iOS 13.

La raison en est que les variables paresseuses ne sont pertinentes que lorsque vous les appelez. Et puisque vous pouvez effectuer une vérification de version sur l’appel lui-même, vous pouvez utiliser l’opérateur @available pour les limiter.

Voyons la solution:

importer UIKit

classe MyTableViewController: UIViewController {

@disponible (iOS 13.0, *)

lazy var datasource = UITableViewDiffableDataSource()

}

Maintenant ça marche!

Alors, pouvons-nous utiliser ‘DiffableDataSource’ tout en prenant en charge iOS 12?

Nous pouvons certainement. Mais vous devez faire deux choses pour bien faire les choses.

Tout d’abord, nous devons comprendre que iOS 12 utilise toujours la méthode cellForRow () du protocole UITableViewDatasource.

Lorsque vous implémentez DiffableDataSource, cellForNow () n’est pas la méthode qui modifie les cellules TableView, et vous le faites maintenant lorsque vous initialisez votre diffableDataSource avec l’argument cellProvider.

Cela signifie que vous devez unir le code vers une troisième fonction pour ne pas avoir de duplication de code dans votre projet.

Deuxièmement (ici ça vient…), vous devez créer un repli chaque fois que vous avez besoin de rafraîchir votre vue de table.

Quelque chose comme ça:

si #disponible (iOS 13.0, *) {

updateSnapshotFromNewData (newData: newData)

} autre {

tableView.reloadData ()

}

Résumé

DiffableDataSource est une excellente fonctionnalité. La plupart de vos utilisateurs exécutent probablement déjà iOS 13, et avec une mise en œuvre facile, vous pouvez leur offrir une meilleure expérience utilisateur et continuer à prendre en charge ces utilisateurs iOS 12. Dieu sait ce qu’ils attendent avec la mise à jour.


Comment utiliser DiffableDataSource et toujours prendre en charge iOS 12 a été initialement publié dans Better Programming on Medium, où les gens poursuivent la conversation en mettant en évidence et en répondant à cette histoire.

Close Menu