我喜欢 JSONModel 库及其概念。虽然只看实施遇到了一些疑问。在初始化程序中
-(instancetype)initWithData:(NSData *)data error:(NSError *__autoreleasing *)err
参数数据转换为字符串并传递给下一个初始化程序
-(id)initWithString:(NSString *)string usingEncoding:(NSStringEncoding)encoding error:(JSONModelError**)err
在这种方法中,它转换回NSData
使用 withNSJSONSerialization
为什么不做这样的事情。。
-(instancetype)initWithData:(NSData *)data error:(NSError *__autoreleasing *)err
{
//not converting nsdata to an nsstring -- using it directly
if (!data.length) return nil;
//read the json
JSONModelError* initError = nil;
id obj = [NSJSONSerialization JSONObjectWithData:data
options:kNilOptions
error:&initError];
if (initError) {
if (err) *err = [JSONModelError errorBadJSON];
return nil;
}
//init with dictionary
id objModel = [self initWithDictionary:obj error:&initError];
if (initError && err) *err = initError;
return objModel;
}
-(id)initWithString:(NSString *)string usingEncoding:(NSStringEncoding)encoding error:(JSONModelError**)err
{
//check for nil input
if (!string) {
if (err) *err = [JSONModelError errorInputIsNil];
return nil;
}
//create an instance
JSONModelError* initError = nil;
id objModel = [self initWithData:[string dataUsingEncoding:encoding] error:&initError];
if (initError && err) *err = initError;
return objModel;
}
这有意义吗?我们应该避免两次转换吗?