首先:Objective-C 没有泛型是完全错误的。这个都市传说的原因是大多数开发人员不知道泛型是什么。泛型是类型无关的代码。时期。这就是定义。Java、Swift、C++ 等静态类型语言需要一种特殊的语法来让编译器在编译时知道具体的代码类型。因此,它们仅支持从编辑到编译的泛型。在动态类型语言中,您不需要任何额外的 $whatever,因为泛型是内置的,从编辑到运行时都是免费的。这是更强大的语言和更少的语言复杂性。
对你的问:
在 Objective-C 中,您可以像创建类一样简单地创建类,而无需考虑 JSON 传输。你不必关心这个。IE。结果如下所示:
@interface ModelClass : NSObject
@property NSArray *successMessages;
@property NSArray *errorMessages;
@property AnotherClass data; // If you do not want to have concrete types here, use id
@end
要填充属性,您可以使用框架。但这不是必需的。(我会对 JSON 模型有一些评论,但这不是 Q 的主题。)
要自己做,只需获取字典(JSON 对象)并从中创建一个实例:
@implementation NSObject (JSONToInstance)
- (id)initFromJSON:(NSDictionary*)JSON dataTypes:(NSDictionary*)types
{
self = [super init];
if (self)
{
for( NSString *key in JSON )
{
id value = JSON[key];
NSDictionary *types = types[key];
Class type = NSClassFromString(key);
if (types)
{
id value = [[type alloc] initWithJSON:value dataType:types];
}
[self setValue:value forKey:key];
}
}
return self;
}
@end
要使用它:
…
NSDictionary *JSON = …;
// Model refers to person and person has no "generic object" at all.
ModelClass *model = [[ModelClass alloc] initWithJSON:JSON dataTypes:@{ @"Person" : @()];
在 Safari 中输入。
但是,当然,您可以使用库。(我个人更喜欢尽可能具体,即使这意味着有更具体的代码。但我是开发人员,而不是秘书。)