JSON 到 Objective-C 中的模型映射
Posted
技术标签:
【中文标题】JSON 到 Objective-C 中的模型映射【英文标题】:JSON To Model Mapping in Objective-C 【发布时间】:2018-04-08 22:10:43 【问题描述】:我正在尝试将收到的 JSON 映射到 Objective-C 中的模型对象。之前我在快速编码时总是使用 ObjectMapper。当我使用 ObjectMapper 时,我似乎无法掌握实现相同结果所需的步骤。问题是当使用 ObjectMapper 时,您编写的代码是在模型类内部发生映射的,例如;
例如:
public struct Item: Mappable
public var name: String?
public var id: Int?
public var description: String?
public init?(map: Map)
init()
public mutating func mapping(map: Map)
name <- map["name"]
id <- map["id"]
description <- map["description"]
我知道我必须编写某种底层辅助类来实现相同的功能,但我似乎无法管理,因为我根本不理解这个概念。我找不到,或者即使我找到了,我也不知道该怎么做。请帮忙。
我猜我的模型类在 Objective-c 中应该是这样的:
@interface BBKProductMetaData : NSObject
@property (nonatomic, strong,nonnull, readonly) NSString *name;
@property (nonatomic, strong,nonnull, readonly) NSInteger *id;
@property (nonatomic, assign,nonnull, readonly) NSString *description;
@end
我应该怎么做才能将我的 JSON 响应映射到这个模型。
【问题讨论】:
实际上在 swift 中有类似ObjectMapper
的库。在 CocoaPods 上搜索。示例:github.com/LoganWright/JSONMapping
有一个很棒的库github.com/Mantle/Mantle
这将是一个框架,所以我有义务不使用库。我不希望我的框架依赖于外部库。
-(id)initWithJSONDict:(NSDictionary *)dict self = [super init]; if (self)_name = dict[@"name"]; _id = [dict[@"id"] integerValue];, _metaDescription = dict[@"description"];return self;
是您要找的吗?或者你是想自己重做 ObjectMapper 库吗?另外,我会避免 NSString *description;
这可能会与 NSObject 的 -description
产生问题。
【参考方案1】:
Objective-c 没有 Swift 进步太多。所以你必须记住一些事情,比如
如果您正在创建模型,这意味着它必须可供其他类访问,因此您必须编写所有要访问其他类的属性和其他声明内容应该在 .h 文件不在 .m 文件中 在objective-c 中,您必须将所有模型类导入到您想要访问的标题中。【讨论】:
以上是关于JSON 到 Objective-C 中的模型映射的主要内容,如果未能解决你的问题,请参考以下文章
RestKit:JSON 映射不起作用 Objective-c