如何在iOS上高效地使用RESTAPI的值对象

如何在iOS上高效地使用RESTAPI的值对象,ios,objective-c,rest,Ios,Objective C,Rest,大小不平凡的JSON REST API要求我序列化并以值对象的形式使用数据进行交互,因此目前我: 手动写入值对象 使用像JSON加速器这样的值对象生成器 手动编写值对象的缺点是生产率低,并且每次更改时都必须返回代码。有一些映射器可以用于数据绑定,但我觉得它们太过阻碍了数据绑定的实现,比如JSONModel、ObjectMapper等等 另一方面,推断Objective-C模型的生成器似乎非常脆弱,生成的代码不符合标准(即,在您期望的NSString的地方交付NSNumber,这可能是崩溃的主

大小不平凡的JSON REST API要求我序列化并以值对象的形式使用数据进行交互,因此目前我:

  • 手动写入值对象
  • 使用像JSON加速器这样的值对象生成器
手动编写值对象的缺点是生产率低,并且每次更改时都必须返回代码。有一些映射器可以用于数据绑定,但我觉得它们太过阻碍了数据绑定的实现,比如JSONModel、ObjectMapper等等

另一方面,推断Objective-C模型的生成器似乎非常脆弱,生成的代码不符合标准(即,在您期望的NSString的地方交付NSNumber,这可能是崩溃的主要来源)

在保持良好的代码质量的同时,有什么好方法可以提高生产率。

您是否尝试过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"
    };
@interface GHIssue : MTLModel <MTLJSONSerializing>
确保您的对象是MTLModel的子类,并且符合MTLJSONSerialization协议,如下所示:

+ (NSDictionary *)JSONKeyPathsByPropertyKey {
    return @{
        @"URL": @"url",
        @"HTMLURL": @"html_url",
        @"number": @"number",
        @"state": @"state",
        @"reporterLogin": @"user.login",
        @"assignee": @"assignee",
        @"updatedAt": @"updated_at"
    };
@interface GHIssue : MTLModel <MTLJSONSerializing>
@接口问题:MTL模型
您试过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"
    };
@interface GHIssue : MTLModel <MTLJSONSerializing>
确保您的对象是MTLModel的子类,并且符合MTLJSONSerialization协议,如下所示:

+ (NSDictionary *)JSONKeyPathsByPropertyKey {
    return @{
        @"URL": @"url",
        @"HTMLURL": @"html_url",
        @"number": @"number",
        @"state": @"state",
        @"reporterLogin": @"user.login",
        @"assignee": @"assignee",
        @"updatedAt": @"updated_at"
    };
@interface GHIssue : MTLModel <MTLJSONSerializing>
@接口问题:MTL模型
您试过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"
    };
@interface GHIssue : MTLModel <MTLJSONSerializing>
确保您的对象是MTLModel的子类,并且符合MTLJSONSerialization协议,如下所示:

+ (NSDictionary *)JSONKeyPathsByPropertyKey {
    return @{
        @"URL": @"url",
        @"HTMLURL": @"html_url",
        @"number": @"number",
        @"state": @"state",
        @"reporterLogin": @"user.login",
        @"assignee": @"assignee",
        @"updatedAt": @"updated_at"
    };
@interface GHIssue : MTLModel <MTLJSONSerializing>
@接口问题:MTL模型
您试过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"
    };
@interface GHIssue : MTLModel <MTLJSONSerializing>
确保您的对象是MTLModel的子类,并且符合MTLJSONSerialization协议,如下所示:

+ (NSDictionary *)JSONKeyPathsByPropertyKey {
    return @{
        @"URL": @"url",
        @"HTMLURL": @"html_url",
        @"number": @"number",
        @"state": @"state",
        @"reporterLogin": @"user.login",
        @"assignee": @"assignee",
        @"updatedAt": @"updated_at"
    };
@interface GHIssue : MTLModel <MTLJSONSerializing>
@接口问题:MTL模型

我还没试过。但是通过扫描Github页面,我可以看出Mantle是一个比JSONModel更好的映射器。问题是,它本质上仍然只是一个映射器。不过我一定会尝试一下的,谢谢!我还没试过。但是通过扫描Github页面,我可以看出Mantle是一个比JSONModel更好的映射器。问题是,它本质上仍然只是一个映射器。不过我一定会尝试一下的,谢谢!我还没试过。但是通过扫描Github页面,我可以看出Mantle是一个比JSONModel更好的映射器。问题是,它本质上仍然只是一个映射器。不过我一定会尝试一下的,谢谢!我还没试过。但是通过扫描Github页面,我可以看出Mantle是一个比JSONModel更好的映射器。问题是,它本质上仍然只是一个映射器。不过我一定会尝试一下的,谢谢!