2010-10-20 71 views
2

用於.Net的AutoMapper允許您從一種類型映射到另一種類型。其最基本的功能是通過複製類型B中存在的類型A(具有匹配的名稱和類型)的屬性值,從另一類類型創建一種類型的類。有沒有類似於Objective-c的AutoMapper?

例子:

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" 

有沒有這樣的事了Objective-C的?

回答

1

如果你真的想要,你可以使用Key-Value Coding,但我會強烈地考慮你爲什麼想要做這樣的事情。

要做到這一點與鍵值編碼,使用-dictionaryWithValuesForKeys:-setValuesForKeysWithDictionary:這樣做。他們記錄在NSKeyValueCoding Protocol Reference

+0

TS鍵/值標記這是因爲它的解決方案確實照顧到部分問題,我仍然需要使用class_copyPropertyList構建一個鍵數組。根據你的第一句話,這聽起來像你認爲這是一個壞主意,任何特定的原因?我想這樣做,從單一類型的NSManagedObject爲多個視圖創建虛擬視圖模型,而無需手動映射各個屬性。 – George 2010-10-21 13:22:14

+0

爲什麼要使用「視圖模型」而不是直接使用模型對象? – 2010-10-22 22:08:30

+0

另外,如果您正在處理託管對象,則不應使用class_copyPropertyList;你可以問一個對象的實體它的(被建模的)屬性是什麼,並且獲得它的屬性,關係和提取屬性的描述。 – 2010-10-22 22:09:31

0

我從.NET世界的未來使用AutoMapper後,類似的問題,我結束了使用OCMapper庫。

特點:

  • 支持陣列映射
  • 支持樹結構映射
  • 支持複雜對象嵌套
  • 支持核心數據(NSManagedObjects)
  • 映像配置既可以在完成代碼或通過PLIST
  • 自動檢測基於的NSDictionary鍵
  • 完全可配置的
  • 不需要子類或添加任何額外的代碼到你的模型
  • 自動日期轉換,並配置DateFormatters
相關問題