2015-07-12 60 views
0

JSON REST的API,在大小非平凡的要求我進行序列化和互動值對象的形式使用數據,所以目前我無論是REST API:我怎樣才能用值對象高效地工作在iOS

  • 手動編寫的值對象
  • 使用的值對象生成像JSON加速器

手動編寫的值對象具有生產效率低的缺點,以及具有回去每次碼有些變化。有映射器可以用於數據綁定,但我覺得他們的方式太過分了,以便像JSONModel,ObjectMapper等。

另一方面,推測Objective-C模型的生成器似乎非常脆弱並且產生不合標準的代碼(例如,在您期望NSString的地方提供NSNumber,這可能是崩潰的主要來源)。

什麼是有頂的生產力,同時保持代碼質量的良好水平的好辦法。

回答

3

你試過地幔(https://github.com/Mantle/Mantle)? 您可以定義屬性的類型的值你所期望:

@property (nonatomic, copy, readonly) NSURL *URL; 
@property (nonatomic, copy, readonly) NSURL *HTMLURL; 
@property (nonatomic, copy, readonly) NSNumber *number; 
@property (nonatomic, assign, readonly) GHIssueState state; 
@property (nonatomic, copy, readonly) NSString *reporterLogin; 
@property (nonatomic, strong, readonly) GHUser *assignee; 
@property (nonatomic, copy, readonly) NSDate *updatedAt; 

然後你就可以知道哪個屬性在此方法中JSONKeyPathsByPropertyKey匹配,如:

+ (NSDictionary *)JSONKeyPathsByPropertyKey { 
    return @{ 
     @"URL": @"url", 
     @"HTMLURL": @"html_url", 
     @"number": @"number", 
     @"state": @"state", 
     @"reporterLogin": @"user.login", 
     @"assignee": @"assignee", 
     @"updatedAt": @"updated_at" 
    }; 

確保您的目標是一個MTLModel的子類,並符合MTLJSONSerializing協議,如下所示:

@interface GHIssue : MTLModel <MTLJSONSerializing> 
+0

我還沒試過。但是從掃描Github頁面,我可以看到Mantle是如何比JSONModel更好的映射器。事情是,它仍然基本上只是一個映射器。我肯定會去看看,謝謝! – keyboardsamurai