6
votes

Objective-C KVC: Modèles d'accessoires de collecte pour plusieurs propriétés, comment puis-je utiliser cela pour améliorer mon code?

Je lisais: Modèles d'accessoires de collecte pour à - de nombreuses propriétés , mais je ne suis pas sûr d'où puis-je ou dois-je utiliser ceci. Peut-on signaler certains scénarios que je peux utiliser des modèles d'accessores de collecte pour à plusieurs propriétés pour rendre mon code mieux ou rendre mon code écrire plus facilement?


0 commentaires

3 Réponses :


0
votes

Il y a des cas où il est vraiment pratique! Voici quelques exemples auto-explicateurs.

Supposons que vous ayez une gamme de prix de vente pour le même article et que vous souhaitez connaître le prix moyen. P>

NSArray *apples = [transactions filteredArrayUsingPredicate:
  [NSPredicate predicateWithFormat:@"object = %@", @"apple"]];
NSNumber *totalApplesSales = [apples valueForKeyPath:@"@sum.price"];


1 commentaires

Pas tort, mais l'OP a posé des questions sur les modèles d'accesseur de collecte pendant que votre réponse semble couvrir les opérateurs de collecte tels que @avg et @sum . Ils ne sont pas la même chose.



3
votes

Les modèles d'accessoires de collecte que vous avez lu sur l'amélioration de la manière dont la valeur de codage de la valeur clé fonctionne avec des collections telles que NSARRAY, NSDictionary, etc. Si vous les implémentez dans vos propres cours, vos classes peuvent être utilisées avec KVC, comme les classes de collecte standard. . Par exemple, vous avez peut-être un vol Classe contenant une liste de passager . Mais peut-être que ces passagers ne sont pas stockés dans un NSARRAY, mais sont tirés d'une base de données ou de quelque chose. Si vous implémentez les méthodes suivantes:

  • -Coundsengers
  • -passengersatudexes:
  • -Bassengers: plage:

    Le code utilisant votre classe peut utiliser KVC pour accéder efficacement à la liste des passagers. Par exemple, vous pouvez obtenir une liste de numéros de dépliant fréquents passagers (en supposant que passager a une telle propriété) comme ceci: xxx

    c'est assez pratique - Vous évite d'avoir à itérer la collection et de collecter tous ces chiffres vous-même. Si vous ne saviez pas que vous pourriez le faire avec les collections standard telles que Nsarray, cela peut sembler surprenant, prenez donc une minute pour absorber d'abord la partie, puis considérez qu'en mettant en œuvre quelques méthodes simples que vous avez faites la même chose pour Votre propre vol classe. Il est assez cool que cela fonctionne même si le stockage des passagers est entièrement interne à votre classe.

    Maintenant, les méthodes ci-dessus couvrent uniquement les getters, mais vous pouvez faire de même pour les configurateurs en mettant en œuvre:

    • -inserPassengers: aindexes:
    • -removePassengersAindexes:
    • -replaceSengersengersAndexes: withPassengers:

      maintenant, encore une fois, votre code peut ajouter et supprimer des passagers d'un vol à l'aide de KVC: xxx

      Il existe d'autres accessoires KVC que vous pouvez implémenter, aussi , mais je ne pense pas que j'ai besoin de les énumérer tous pour vous puisqu'ils sont là dans l'article que vous avez lié. Le point est que le codage de la valeur clé est une substance utile utilisée dans un certain nombre de places, et en mettant en œuvre une petite poignée de méthodes, vous pouvez créer vos propres classes KVC conformes.


0 commentaires

0
votes

ajouter à cela. L'adoption de ceux-ci dans votre API de classe permet à votre classe de tirer parti des mêmes comportements de codage génériques établis dans les collections de fondation.

Un exemple utile serait la collection non ordonnée. Vous pouvez implémenter cela afin que toutes les propriétés publiques de votre classe soient accessibles comme un dictionnaire. Allkeys retournerait les noms de propriété. Les allValues ​​rendraient les valeurs de ces propriétés. instanceofyourclass [Apropertyname] retournerait la propriété ApropertyName

Cela permettrait une itération rapide et une introspection. La mise en œuvre prendrait des efforts, mais rendrait une classe en bonne classe dans KVC et KVO et ajouterait la capacité de faire des choses simples et intelligentes avec des liaisons.


0 commentaires