2010-10-20 27 views
2

AutoMapper for .Net vous permet de mapper d'un type à un autre. Sa fonction la plus élémentaire consiste à créer un type de classe à partir d'un autre type de classe en copiant les valeurs de propriété du type A qui existent dans le type B (avec des noms et des types correspondants).Y a-t-il quelque chose de similaire à AutoMapper pour Objective-c?

Exemple:

public class ClassA { 
    public string StringProp { get; set; } 
    public int IntProp { get;set; } 
} 
public class ClassB { 
    public string StringProp { get; set; } 
    public int SomeIntProp { get; set; } 
} 

ClassA classAInstance = new ClassA { StringProp = "Test", IntProp = 5 }; 
ClassB classBInstance = Mapper.Map<ClassA, ClassB>(classAInstance); 

// This creates a new instance of ClassB and sets its StringProp property to "Test". 
// It does not set the property on ClassB called "SomeIntProp" because there is no 
// property on ClassA called "SomeIntProp" 

Y at-il quelque chose comme ça pour Objective-C?

Répondre

1

Vous pouvez utiliser le codage de valeur-clé pour cela si vous le voulez vraiment vraiment, mais je réfléchirais sérieusement à la raison pour laquelle vous voudriez le faire en premier lieu. Pour le faire avec le codage Key-Value, utilisez -dictionaryWithValuesForKeys: et -setValuesForKeysWithDictionary: pour le faire. Ils sont documentés dans le NSKeyValueCoding Protocol Reference.

+0

Marqué cela comme une solution car elle s'occupe d'une partie du problème, je vais devoir construire un tableau de clés en utilisant class_copyPropertyList. Basé sur votre première phrase, il semble que vous pensez que c'est une mauvaise idée, une raison particulière? Je veux le faire pour créer des modèles de vue dégradés pour plusieurs vues à partir d'un seul type de NSManagedObject sans avoir à mapper les propriétés individuelles manuellement. – George

+0

Pourquoi voulez-vous utiliser "view models" plutôt que d'utiliser directement les objets du modèle? –

+0

De même, si vous traitez des objets gérés, vous ne devez pas utiliser class_copyPropertyList; vous pouvez simplement demander à l'entité d'un objet quelles sont ses propriétés (modélisées) et obtenir ses descriptions de ses attributs, relations et propriétés récupérées. –

0

J'ai eu un problème similaire venant de monde .NET après avoir utilisé AutoMapper et je fini par utiliser la bibliothèque OCMapper.

Caractéristiques:

  • Prise en charge réseau cartographie
  • Supporte la cartographie de structure arborescente
  • Prise en charge objet complexe imbrication
  • Prise en charge des données de base (Les NSManagedObjects)
  • configuration de mappage peut être fait à la fois en code ou par un PLIST
  • Auto detec ts clés/valeurs basées sur les clés NSDictionary
  • entièrement configurable
  • Ne nécessite pas subclassing ou en ajoutant un code supplémentaire pour vos modèles
  • de conversion date automatique et DateFormatters configurables