CN115357251A - 一种移动端iOS开发数据转模型的方法 - Google Patents

一种移动端iOS开发数据转模型的方法 Download PDF

Info

Publication number
CN115357251A
CN115357251A CN202210981492.1A CN202210981492A CN115357251A CN 115357251 A CN115357251 A CN 115357251A CN 202210981492 A CN202210981492 A CN 202210981492A CN 115357251 A CN115357251 A CN 115357251A
Authority
CN
China
Prior art keywords
model
array
class
dictionary
nsobject
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202210981492.1A
Other languages
English (en)
Inventor
潘信璋
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Yinsheng Payment Service Co Ltd
Original Assignee
Yinsheng Payment Service Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Yinsheng Payment Service Co Ltd filed Critical Yinsheng Payment Service Co Ltd
Priority to CN202210981492.1A priority Critical patent/CN115357251A/zh
Publication of CN115357251A publication Critical patent/CN115357251A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/25Integrating or interfacing systems involving database management systems

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明提供了一种移动端iOS开发数据转模型的方法,涉及互联网技术领域,该方法包括:S1、创建基类NSObject的分类Category文件NSObject+JSONModel;S2、通过所述分类文件NSObject+JSONModel,完成JSON数据转换成模型Model相关方法的声明;S3、通过所述分类文件NSObject+JSONModel,完成关键字的替换以及数组类模型的替换方法在实现类区间的定义和实现;S4、通过所述字典转模型方法+(instancetype)modelWi thDict:(NSDictionary*)dict的声明和定义,前往实现字典转模型;S5、通过所述字典数组转模型数组类方法+(NSArray*)modelWi thArray:(NSArray*)array的声明和定义,前往实现字典数组转模型数组;S6、完成字典转模型和字典数组转模型数组功能的封装,对不同的业务场景创建不同的业务模型类名字,并对需要用到的业务参数进行属性声明,再进行调用和解析。

Description

一种移动端iOS开发数据转模型的方法
技术领域
本发明涉及互联网技术领域,具体的,本发明涉及一种移动端iOS开发数据转模型的方法。
背景技术
解析服务器后端返回的JSON数据时,往往通过字典的键值对来读取解析,而键值key的书写不能通过编辑器来检测语法,因此,当键值key写错时,不能通过编辑器的编译发现,如此情形下的解析数据编写出错,对开发人员来说不易发现,因此,在每次需要用到时都需要确保键值的输入正确,导致开发速度相对缓慢。
因此需要一种移动端iOS开发效率更高并且可以避免书写错误无法及时发现的方案。
发明内容
为了克服现有技术的不足,本发明提供了一种移动端iOS开发数据转模型的方法,以解决上述的技术问题。
本发明解决其技术问题所采用的技术方法是:一种移动端iOS开发数据转模型的方法,其改进之处在于:包括以下的步骤:S1、创建基类NSObject的分类Category文件NSObject+JSONModel;S2、通过所述分类文件NSObject+JSONModel,完成JSON数据转换成模型Model相关方法的声明,完成字典转模型方法+(instancetype)modelWithDict:(NSDictionary*)dict和字典数组转模型数组类方法+(NSArray*)modelWithArray:(NSArray*)array在实现区间的定义;S3、通过所述分类文件NSObject+JSONModel,完成关键字的替换以及数组类模型的替换方法在实现类区间的定义和实现;S4、通过所述字典转模型方法+(instancetype)modelWithDict:(NSDictionary*)dict的声明和定义,前往实现字典转模型;S5、通过所述字典数组转模型数组类方法+(NSArray*)modelWithArray:(NSArray*)array的声明和定义,前往实现字典数组转模型数组;S6、完成字典转模型和字典数组转模型数组功能的封装,对不同的业务场景创建不同的业务模型类名字,并对需要用到的业务参数进行属性声明,再进行调用和解析。
在上述方法中,所述步骤S1,包括以下的步骤:
S11、通过开发工具Xcode编辑器,右键选择新建文件操作New File新建文件,在弹出的文件类型选项中选择文件类型Object-C File;
S12、在弹出的弹窗选项中编辑,选择文件类型File Type为分类Category,选择需要创建分类的类名类型Class为基类NSObject,并将创建的分类Category文件File命名为JSONModel,点击完成可得到基类NSObject的分类文件NSObject+JSONModel,用于实现JSON数据转换成模型对象的功能。
在上述方法中,所述步骤S2,包括以下的步骤:
S21、前往所述分类文件件NSObject+JSONModel的声明类NSObject+JSONModel.h的声明区间@interface,声明字典转模型方法+(instancetype)modelWithDict:(NSDictionary*)dict,将该方法公开给外部调用;
S22、前往所述分类文件NSObject+JSONModel的实现类NSObject+JSONModel.m的实现区间@implementation,完成字典转模型实例方法+(instancetype)modelWithDict:(NSDictionary*)dict在实现区间的定义;
S23、前往所述分类文件NSObject+JSONModel的声明类NSObject+JSONModel.h的声明区间@interface,声明字典数组转模型数组类方法+(NSArray*)modelWithArray:(NSArray*)array,将该方法公开给外部调用;
S24、前往所述分类文件NSObject+JSONModel的实现类NSObject+JSONModel.m的实现区间@implementation,完成字典数组转模型数组类方法+(NSArray*)modelWithArray:(NSArray*)array在实现区间的定义。
在上述方法中,所述步骤S3,包括以下的步骤:
S31、前往所述分类文件NSObject+JSONModel的实现类NSObject+JSONModel.m的实现区间@implementation,完成关键字参数替换方法+(NSDictionary*)replacedKeyFromPropertyName的定义;
S32、前往所述分类文件NSObject+JSONModel的实现类NSObject+JSONModel.m的实现区间@implementation,完成数组类模型替换方法+(NSDictionary*)objectClassInArray的定义。
在上述方法中,所述步骤S31中,通过返回一个空字典@{},实现关键字参数替换方法replacedKeyFromPropertyName。
在上述方法中,所述步骤S32中,通过返回一个空字典@{},实现数组类模型替换方法objectClassInArray。
在上述方法中,所述步骤S4,包括以下的步骤:
S41、前往所述分类文件NSObject+JSONModel的实现类NSObject+JSONModel.m,通过模块引入方法#import引入开发语言Object-C的运行时库#import<objc/runtime.h>;
S42、判断所述字典转模型方法+(instancetype)modelWithDict:(NSDictionary*)dict传进来的需要转换成模型的数据dict是否为空,若是,则直接返回一个空nil,若不是,则跳转至步骤S43;
S43、通过运行时获取类声明的实例变量方法class_copyIvarList,得到调用字典转模型方法的Model类里的所有实例变量ivarList;
S44、通过循环方法for(int i=0;i<count;i++)循环遍历实例变量ivarList;
S45、通过实例变量ivarList数组下标i获取该下标对应的实例ivar,通过获取实例变量名的C字符串方法ivar_getName获取该实例ivar实例变量的名称ivarName,通过获取实例变量类型编码的C字符串获取该实例变量ivar实例变量的类型ivarType,并将所述的实例变量名称ivarName和实例变量类型ivarType转换成字符串NSString的UTF8转换,同时去除里面的斜杠\和空字符串;
S46、截取实例变量名称ivarName的第一个字符串得到一个键值key,通过字典的取值方法,根据该key获取字典dict里该键值key对应的值value,通过调用所述的获取关键字替换方法replacedKeyFromPropertyName获取当前的关键字替换对象,当key在该关键字替换对象里,则替换键值key并根据键值key获取对应的值赋给value;
S47、通过类型判断方法isKindOfClass判断所述的根据键值key获取到的值value是否为字典[NSDictionary class]类型,若不是,则不需处理;若是,且此时的实例变量类型ivarType不包含NS前缀,则通过字符串初始化类的方法NSClassFromString将变量类型ivarType转换成新的模型类,再调用JSON数据转模型方法modelWithDict将字典对象value转成模型,完成模型里嵌套模型的转换;
S48、通过类型判断方法isKindOfClass判断所述的根据键值key获取到的值value是否为数组[NSArray class]类型,若不是,则不需处理,若是,且需要转换JSON成模型的目标模型类里实现了数组中需要转换的模型objectClassInArray的方法,则通过调用所述的数组类模型替换方法objectClassInArray获取数组中字典对应的模型类字典数据,并根据所述的键值key获取该模型的字符串描述type,通过字符串初始化类的方法NSClassFromString类的方法将该字符串描述type转换成模型类,遍历该数组类型值value里包含的所有字典,并分别再调用JSON数据转模型方法modelWithDict将value包含的所有字典对象转成模型,同时用可变数组接收,将所述的可变数组赋值给value;
S49、判断所述的value最终的值是否为空,若为空,则不处理,并跳转至步骤S44继续循环,若不为空,则通过设值方法setValue:forKey:将值赋给目标模型对象的对应属性,并跳转至步骤S44继续循环,直至for循环结束,完成将JSON数据中字典转换成模型的实现。
在上述方法中,所述步骤S5,包括以下的步骤:
S51、通过可变数组的初始化方法[NSMutableArray array]初始化并得到可变数组mutArray;
S52、通过所述循环方法for(int i=0;i<count;i++)循环遍历需要进行模型转换的字典数组array;
S53、调用所述的的字典转模型方法+(instancetype)modelWithDict:(NSDictionary*)dict方法对遍历得到的字典数组array的每个元素字典进行单独的字典转模型,完成字段转模型的转换,并将得到的每个模型存到可变数组mutArray;
S54、跳转至步骤S52,直至循环结束,得到所有字典数组转换成的模型数组。
在上述方法中,所述步骤S6,包括以下的步骤:
S61、通过开发工具Xcode编辑器,右键选择新建文件操作New File新建文件,在弹出的文件类型选项中选择文件类型Cocoa Touch Class;
S62、在弹出的弹窗选项中选择继承的基类为NSObject,文件名根据实际业务进行命名,命名为BusinessModel;
S63、前往对应的业务模型的声明类BusinessModel.h的声明区间@interface中,根据具体的业务参数完成对应属性的声明;
S64、当需要转模型的JOSN数据是字典dic,则调用所述的字典转模型方法+(instancetype)modelWithDict:(NSDictionary*)dict,即BusinessModel*model=[BusinessModel modelWithDict:dic],其中BusinessModel即具体业务模型类BusinessModel,dic为需要解析的JSON数据,model即为最终输出的JSON数据转换成模型的结果;
S65、当需要转成模型的JSON数据是一个包含很多相同键值的字典数组array,则调用所述的字典数组转模型数组类方法+(NSArray*)modelWithArray:(NSArray*)array,BusinessModel*model=[BusinessModel modelWithDict:dic],即NSArray*modeArray=[BusinessModel modelWithArray:array],其中BusinessModel即具体业务模型类BusinessModel,array为需要解析的JSON数据,modeArray即为最终输出的JSON数据转换成模型数组的结果;
S66、通过点属性直接联想,获取最终转换成模型的数据,并在应用场景中使用。
本发明的有益效果是:实现了根据传进来的模型类快速解析出类文件包含的属性,同时将解析到的JSON数据相关的参数赋值给模型类对应的属性,实现一个方法就可以将轻量级的数据交换格式JOSN转换成模型对象,在实际使用中通过属性的点语法去赋值取值,方便存取,编译预警;并且,通过属性的点语法编辑器自带的联想功能,只要输入属性参数的其中几个字符串就可以进行联想,开发效率更高,同时避免了书写错误无法及时发现的问题,避免了通过键值存取数据时,对开发工程中出现的疏忽错误,编译器不能报错,也不能快速查出错误原因;并且解决了数据里带有关键字不能直接声明属性的问题,以及字典数据里包含数组同时数组里又包含需要转换的模型的问题。
附图说明
附图1为本发明的一种移动端iOS开发数据转模型的方法的流程图。
具体实施方式
下面结合附图和实施例对本发明进一步说明。
以下将结合实施例和附图对本发明的构思、具体结构及产生的技术效果进行清楚、完整地描述,以充分地理解本发明的目的、特征和效果。显然,所描述的实施例只是本发明的一部分实施例,而不是全部实施例,基于本发明的实施例,本领域的技术人员在不付出创造性劳动的前提下所获得的其他实施例,均属于本发明保护的范围。另外,专利中涉及到的所有联接/连接关系,并非单指构件直接相接,而是指可根据具体实施情况,通过添加或减少联接辅件,来组成更优的联接结构。本发明创造中的各个技术特征,在不互相矛盾冲突的前提下可以交互组合。
JSON:一种轻量级的数据交换格式,包含常见的字典、数组等。
Xcode:开发移动端平台iOS应用的编辑器开发工具。
Object-C:一门用于开发移动端iOS应用的编程语言。
参照图1所示,本发明提供了一种移动端iOS开发数据转模型的方法,包括以下的步骤:
S1、通过创建基类NSObject的分类Category文件NSObject+JSONModel,用于实现JSON数据转换成模型对象的功能;
具体的,所述步骤S1,包括以下的步骤:
S11、通过开发工具Xcode编辑器,右键选择新建文件操作New File新建文件,在弹出的文件类型选项中选择文件类型Object-C File;
S12、在弹出的弹窗选项中编辑,选择文件类型File Type为分类Category,选择需要创建分类的类名类型Class为基类NSObject,并将创建的分类Category文件File命名为JSONModel,点击完成可得到基类NSObject的分类文件NSObject+JSONModel,用于实现JSON数据转换成模型对象的功能。
S2、通过在步骤S1中得到的所述分类文件NSObject+JSONModel,完成JSON数据转换成模型Model相关方法的声明,完成字典转模型方法+(instancetype)modelWithDict:(NSDictionary*)dict和字典数组转模型数组类方法+(NSArray*)modelWithArray:(NSArray*)array在实现区间的定义;
具体的,所述步骤S2,包括以下的步骤:
S21、前往所述分类文件件NSObject+JSONModel的声明类NSObject+JSONModel.h的声明区间@interface,声明字典转模型方法+(instancetype)modelWithDict:(NSDictionary*)dict,用于将该方法公开给外部调用;
S22、前往所述分类文件NSObject+JSONModel的实现类NSObject+JSONModel.m的实现区间@implementation,完成字典转模型实例方法+(instancetype)modelWithDict:(NSDictionary*)dict在实现区间的定义;
S23、前往所述分类文件NSObject+JSONModel的声明类NSObject+JSONModel.h的声明区间@interface,声明字典数组转模型数组类方法+(NSArray*)modelWithArray:(NSArray*)array,用于将该方法公开给外部调用;
S24、前往所述分类文件NSObject+JSONModel的实现类NSObject+JSONModel.m的实现区间@implementation,完成字典数组转模型数组类方法+(NSArray*)modelWithArray:(NSArray*)array在实现区间的定义。
S3、通过在步骤S1中得到的所述分类文件NSObject+JSONModel,完成关键字的替换以及数组类模型的替换方法在实现类区间的定义和实现;
具体的,所述步骤S3,包括以下的步骤:
S31、前往所述分类文件NSObject+JSONModel的实现类NSObject+JSONModel.m的实现区间@implementation,完成关键字参数替换方法+(NSDictionary*)replacedKeyFromPropertyName的定义;当前只需通过返回一个空字典@{},便可实现关键字参数替换方法replacedKeyFromPropertyName,在实际业务场景根据实际需要替换和返回;
S32、前往所述分类文件NSObject+JSONModel的实现类NSObject+JSONModel.m的实现区间@implementation,完成数组类模型替换方法+(NSDictionary*)objectClassInArray的定义;当前只需通过返回一个空字典@{},便可实现数组类模型替换方法objectClassInArray,在实际业务场景根据实际需要替换和返回。
由于开发语言Object-C中,内置的关键字是不能作为属性声明的,因此当解析到的JSON里的参数是开发语言Object-C中的关键字时,需要进行替换成非关键字,使声明的属性为非关键字,在解析的时候将解析到的关键字参数以及其值,映射给替换的非关键字,并将值附上;同时在实际中往往存在数组中需要转换的模型类也需要进行处理。步骤S3便是解决这些问题。
S4、通过步骤S2中所述字典转模型方法+(instancetype)modelWithDict:(NSDictionary*)dict的声明和定义,前往实现字典转模型;
具体的,所述步骤S4,包括以下的步骤:
S41、前往所述分类文件NSObject+JSONModel的实现类NSObject+JSONModel.m,通过模块引入方法#import引入开发语言Object-C的运行时库#import<objc/runtime.h>;
S42、判断所述字典转模型方法+(instancetype)modelWithDict:(NSDictionary*)dict传进来的需要转换成模型的数据dict是否为空,若是为空,则直接返回一个空nil,转换结束,表明该转换后的模型没有数据,若不是,则跳转至步骤S43;
S43、通过运行时获取类声明的实例变量方法class_copyIvarList,得到调用字典转模型方法的Model类里的所有实例变量ivarList;
S44、通过循环方法for(int i=0;i<count;i++)循环遍历实例变量ivarList;
S45、通过实例变量ivarList数组下标i获取该下标对应的实例ivar,通过获取实例变量名的C字符串方法ivar_getName获取该实例ivar实例变量的名称ivarName,通过获取实例变量类型编码的C字符串获取该实例变量ivar实例变量的类型ivarType,并将所述的实例变量名称ivarName和实例变量类型ivarType转换成字符串NSString的UTF8转换,同时去除里面的斜杠\和空字符串;
S46、截取实例变量名称ivarName的第一个字符串得到一个键值key,通过字典的取值方法,根据该key获取字典dict里该键值key对应的值value,通过调用步骤S3中所述的获取关键字替换方法replacedKeyFromPropertyName获取当前的关键字替换对象,当key在该关键字替换对象里,则替换key并根据键值key获取对应的值赋给value;
S47、通过类型判断方法isKindOfClass判断步骤S46中所述的根据键值key获取到的值value是否为字典[NSDictionary class]类型,若不是,则不需处理;若是,且此时的实例变量类型ivarType不包含NS前缀,则通过字符串初始化类的方法NSClassFromString将变量类型ivarType转换成新的模型类,再调用JSON数据转模型方法modelWithDict将字典对象value转成模型,完成模型里嵌套模型的转换;
S48、通过类型判断方法isKindOfClass判断步骤S46中所述的根据键值key获取到的值value是否为数组[NSArray class]类型,若不是,则不需处理,若是,且需要转换JSON成模型的目标模型类里实现了数组中需要转换的模型objectClassInArray的方法,则通过调用步骤S3中所述的数组类模型替换方法objectClassInArray获取数组中字典对应的模型类字典数据,并根据所述的键值key获取该模型的字符串描述type,通过字符串初始化类的方法NSClassFromString类的方法将该字符串描述type转换成模型类,遍历该数组类型值value里包含的所有字典,并分别再调用JSON数据转模型方法modelWithDict将value包含的所有字典对象转成模型,同时用可变数组接收,将所述的可变数组赋值给value;
S49、判断所述的value最终的值是否为空,若为空,则不处理,并跳转至步骤S44继续循环,若不为空,则通过设值方法setValue:forKey:将值赋给目标模型对象的对应属性,并跳转至步骤S44继续循环,直至for循环结束,即完成了将JSON数据中字典转换成模型的实现。
S5、通过步骤S2中所述字典数组转模型数组类方法+(NSArray*)modelWithArray:(NSArray*)array的声明和定义,前往实现字典数组转模型数组;
所述步骤S5,包括以下的步骤:
S51、通过可变数组的初始化方法[NSMutableArray array]初始化并得到可变数组mutArray;
S52、通过所述循环方法for(int i=0;i<count;i++)循环遍历需要进行模型转换的字典数组array;
S53、调用所述的的字典转模型方法+(instancetype)modelWithDict:(NSDictionary*)dict方法对遍历得到的字典数组array的每个元素字典进行单独的字典转模型,完成字段转模型的转换,并将得到的每个模型存到可变数组mutArray;
S54、跳转至步骤S52,直至循环结束,得到所有字典数组转换成的模型数组。
S6、通过步骤S1-S5,完成了字典转模型和字典数组转模型数组功能的封装,需要解析的JSON数据,根据业务场景的不同,参数乃至数据格式也是不一样的,因此需要对不同的业务场景创建不同的业务模型类名字,例如BusinessModel,并对需要用到的业务参数进行属性声明,再进行调用和解析;
所述步骤S6,包括以下的步骤:
S61、通过开发工具Xcode编辑器,右键选择新建文件操作New File新建文件,在弹出的文件类型选项中选择文件类型Cocoa Touch Class;
S62、在弹出的弹窗选项中选择继承的基类为NSObject,文件名根据实际业务进行命名,例如命名为BusinessModel,也可命名为其他;
S63、前往对应的业务模型的声明类BusinessModel.h的声明区间@interface中,根据具体的业务参数完成对应属性的声明;
S64、当需要转模型的JOSN数据是字典dic,则调用步骤S4中所述的字典转模型方法+(instancetype)modelWithDict:(NSDictionary*)dict,即BusinessModel*model=[BusinessModel modelWithDict:dic],其中BusinessModel即具体业务模型类BusinessModel,dic为需要解析的JSON数据,model即为最终输出的JSON数据转换成模型的结果;
S65、当需要转成模型的JSON数据是一个包含很多相同键值的字典数组array,则调用步骤S5中所述的字典数组转模型数组类方法+(NSArray*)modelWithArray:(NSArray*)array,BusinessModel*model=[BusinessModel modelWithDict:dic],即NSArray*modeArray=[BusinessModel modelWithArray:array],其中BusinessModel即具体业务模型类BusinessModel,array为需要解析的JSON数据,modeArray即为最终输出的JSON数据转换成模型数组的结果;
S66、通过点属性直接联想,获取最终转换成模型的数据,并在应用场景中使用,如上述步骤S63声明了一个名字name的属性,经过模型转换后,就可以通过model.name拿到原始JSON数据里键值key为name的值。这样我们只要属性声明正确,通过转换成模型之后,都可以通过点语法去获取对应的name,而不需要通过键值取值的方式进行获取,提升开发速度,同时避免键值写错没法编译报错。
本发明的一种移动端iOS开发数据转模型的方法,实现了根据传进来的模型类快速解析出类文件包含的属性,同时将解析到的JSON数据相关的参数赋值给模型类对应的属性,实现一个方法就可以将轻量级的数据交换格式JOSN转换成模型对象,在实际使用中通过属性的点语法去赋值取值,方便存取,编译预警;并且,通过属性的点语法编辑器自带的联想功能,只要输入属性参数的其中几个字符串就可以进行联想,开发效率更高,同时避免了书写错误无法及时发现的问题,避免了通过键值存取数据时,对开发工程中出现的疏忽错误,编译器不能报错,也不能快速查出错误原因;并且解决了数据里带有关键字不能直接声明属性的问题,以及字典数据里包含数组同时数组里又包含需要转换的模型的问题。
以上是对本发明的较佳实施进行了具体说明,但本发明创造并不限于所述实施例,熟悉本领域的技术人员在不违背本发明精神的前提下还可做出种种的等同变形或替换,这些等同的变形或替换均包含在本申请权利要求所限定的范围内。

Claims (9)

1.一种移动端iOS开发数据转模型的方法,其特征在于:包括以下的步骤:
S1、创建基类NSObject的分类Category文件NSObject+JSONModel;
S2、通过所述分类文件NSObject+JSONModel,完成JSON数据转换成模型Model相关方法的声明,完成字典转模型方法+(instancetype)modelWithDict:(NSDictionary*)dict和字典数组转模型数组类方法+(NSArray*)modelWithArray:(NSArray*)array在实现区间的定义;
S3、通过所述分类文件NSObject+JSONModel,完成关键字的替换以及数组类模型的替换方法在实现类区间的定义和实现;
S4、通过所述字典转模型方法+(instancetype)modelWithDict:(NSDictionary*)dict的声明和定义,前往实现字典转模型;
S5、通过所述字典数组转模型数组类方法+(NSArray*)modelWithArray:(NSArray*)array的声明和定义,前往实现字典数组转模型数组;
S6、完成字典转模型和字典数组转模型数组功能的封装,对不同的业务场景创建不同的业务模型类名字,并对需要用到的业务参数进行属性声明,再进行调用和解析。
2.如权利要求1所述的一种移动端iOS开发数据转模型的方法,其特征在于:所述步骤S1,包括以下的步骤:
S11、通过开发工具Xcode编辑器,右键选择新建文件操作New File新建文件,在弹出的文件类型选项中选择文件类型Object-C File;
S12、在弹出的弹窗选项中编辑,选择文件类型File Type为分类Category,选择需要创建分类的类名类型Class为基类NSObject,并将创建的分类Category文件File命名为JSONModel,点击完成可得到基类NSObject的分类文件NSObject+JSONModel,用于实现JSON数据转换成模型对象的功能。
3.如权利要求2所述的一种移动端iOS开发数据转模型的方法,其特征在于:所述步骤S2,包括以下的步骤:
S21、前往所述分类文件件NSObject+JSONModel的声明类NSObject+JSONModel.h的声明区间@interface,声明字典转模型方法+(instancetype)modelWithDict:(NSDictionary*)dict,将该方法公开给外部调用;
S22、前往所述分类文件NSObject+JSONModel的实现类NSObject+JSONModel.m的实现区间@implementation,完成字典转模型实例方法+(instancetype)modelWithDict:(NSDictionary*)dict在实现区间的定义;
S23、前往所述分类文件NSObject+JSONModel的声明类NSObject+JSONModel.h的声明区间@interface,声明字典数组转模型数组类方法+(NSArray*)modelWithArray:(NSArray*)array,将该方法公开给外部调用;
S24、前往所述分类文件NSObject+JSONModel的实现类NSObject+JSONModel.m的实现区间@implementation,完成字典数组转模型数组类方法+(NSArray*)modelWithArray:(NSArray*)array在实现区间的定义。
4.如权利要求3所述的一种移动端iOS开发数据转模型的方法,其特征在于:所述步骤S3,包括以下的步骤:
S31、前往所述分类文件NSObject+JSONModel的实现类NSObject+JSONModel.m的实现区间@implementation,完成关键字参数替换方法+(NSDictionary*)replacedKeyFromPropertyName的定义;
S32、前往所述分类文件NSObject+JSONModel的实现类NSObject+JSONModel.m的实现区间@implementation,完成数组类模型替换方法+(NSDictionary*)objectClassInArray的定义。
5.如权利要求4所述的一种移动端iOS开发数据转模型的方法,其特征在于:所述步骤S31中,通过返回一个空字典@{},实现关键字参数替换方法replacedKeyFromPropertyName。
6.如权利要求5所述的一种移动端iOS开发数据转模型的方法,其特征在于:所述步骤S32中,通过返回一个空字典@{},实现数组类模型替换方法objectClassInArray。
7.如权利要求6所述的一种移动端iOS开发数据转模型的方法,其特征在于:所述步骤S4,包括以下的步骤:
S41、前往所述分类文件NSObject+JSONModel的实现类NSObject+JSONModel.m,通过模块引入方法#import引入开发语言Object-C的运行时库#import<objc/runtime.h>;
S42、判断所述字典转模型方法+(instancetype)modelWithDict:(NSDictionary*)dict传进来的需要转换成模型的数据dict是否为空,若是,则直接返回一个空nil,若不是,则跳转至步骤S43;
S43、通过运行时获取类声明的实例变量方法class_copyIvarList,得到调用字典转模型方法的Model类里的所有实例变量ivarList;
S44、通过循环方法for(int i=0;i<count;i++)循环遍历实例变量ivarList;
S45、通过实例变量ivarList数组下标i获取该下标对应的实例ivar,通过获取实例变量名的C字符串方法ivar_getName获取该实例ivar实例变量的名称ivarName,通过获取实例变量类型编码的C字符串获取该实例变量ivar实例变量的类型ivarType,并将所述的实例变量名称ivarName和实例变量类型ivarType转换成字符串NSString的UTF8转换,同时去除里面的斜杠\和空字符串;
S46、截取实例变量名称ivarName的第一个字符串得到一个键值key,通过字典的取值方法,根据该key获取字典dict里该键值key对应的值value,通过调用所述的获取关键字替换方法replacedKeyFromPropertyName获取当前的关键字替换对象,当key在该关键字替换对象里,则替换键值key并根据键值key获取对应的值赋给value;
S47、通过类型判断方法isKindOfClass判断所述的根据键值key获取到的值value是否为字典[NSDictionary class]类型,若不是,则不需处理;若是,且此时的实例变量类型ivarType不包含NS前缀,则通过字符串初始化类的方法NSClassFromString将变量类型ivarType转换成新的模型类,再调用JSON数据转模型方法modelWithDict将字典对象value转成模型,完成模型里嵌套模型的转换;
S48、通过类型判断方法isKindOfClass判断所述的根据键值key获取到的值value是否为数组[NSArray class]类型,若不是,则不需处理,若是,且需要转换JSON成模型的目标模型类里实现了数组中需要转换的模型objectClassInArray的方法,则通过调用所述的数组类模型替换方法objectClassInArray获取数组中字典对应的模型类字典数据,并根据所述的键值key获取该模型的字符串描述type,通过字符串初始化类的方法NSClassFromString类的方法将该字符串描述type转换成模型类,遍历该数组类型值value里包含的所有字典,并分别再调用JSON数据转模型方法modelWithDict将value包含的所有字典对象转成模型,同时用可变数组接收,将所述的可变数组赋值给value;
S49、判断所述的value最终的值是否为空,若为空,则不处理,并跳转至步骤S44继续循环,若不为空,则通过设值方法setValue:forKey:将值赋给目标模型对象的对应属性,并跳转至步骤S44继续循环,直至for循环结束,完成将JSON数据中字典转换成模型的实现。
8.如权利要求7所述的一种移动端iOS开发数据转模型的方法,其特征在于:所述步骤S5,包括以下的步骤:
S51、通过可变数组的初始化方法[NSMutableArray array]初始化并得到可变数组mutArray;
S52、通过所述循环方法for(int i=0;i<count;i++)循环遍历需要进行模型转换的字典数组array;
S53、调用所述的的字典转模型方法+(instancetype)modelWithDict:(NSDictionary*)dict方法对遍历得到的字典数组array的每个元素字典进行单独的字典转模型,完成字段转模型的转换,并将得到的每个模型存到可变数组mutArray;
S54、跳转至步骤S52,直至循环结束,得到所有字典数组转换成的模型数组。
9.如权利要求8所述的一种移动端iOS开发数据转模型的方法,其特征在于:所述步骤S6,包括以下的步骤:
S61、通过开发工具Xcode编辑器,右键选择新建文件操作New File新建文件,在弹出的文件类型选项中选择文件类型Cocoa Touch Class;
S62、在弹出的弹窗选项中选择继承的基类为NSObject,文件名根据实际业务进行命名,命名为BusinessModel;
S63、前往对应的业务模型的声明类BusinessModel.h的声明区间@interface中,根据具体的业务参数完成对应属性的声明;
S64、当需要转模型的JOSN数据是字典dic,则调用所述的字典转模型方法+(instancetype)modelWithDict:(NSDictionary*)dict,即BusinessModel*model=[BusinessModelmodelWithDict:dic],其中BusinessModel即具体业务模型类BusinessModel,dic为需要解析的JSON数据,model即为最终输出的JSON数据转换成模型的结果;
S65、当需要转成模型的JSON数据是一个包含很多相同键值的字典数组array,则调用所述的字典数组转模型数组类方法+(NSArray*)modelWithArray:(NSArray*)array,BusinessModel*model=[BusinessModel modelWithDict:dic],即NSArray*modeArray=[BusinessModel modelWithArray:array],其中BusinessModel即具体业务模型类BusinessModel,array为需要解析的JSON数据,modeArray即为最终输出的JSON数据转换成模型数组的结果;
S66、通过点属性直接联想,获取最终转换成模型的数据,并在应用场景中使用。
CN202210981492.1A 2022-08-15 2022-08-15 一种移动端iOS开发数据转模型的方法 Pending CN115357251A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210981492.1A CN115357251A (zh) 2022-08-15 2022-08-15 一种移动端iOS开发数据转模型的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210981492.1A CN115357251A (zh) 2022-08-15 2022-08-15 一种移动端iOS开发数据转模型的方法

Publications (1)

Publication Number Publication Date
CN115357251A true CN115357251A (zh) 2022-11-18

Family

ID=84000964

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210981492.1A Pending CN115357251A (zh) 2022-08-15 2022-08-15 一种移动端iOS开发数据转模型的方法

Country Status (1)

Country Link
CN (1) CN115357251A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116048478A (zh) * 2023-03-07 2023-05-02 智慧眼科技股份有限公司 一种字典转义方法、装置、设备及计算机可读存储介质

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116048478A (zh) * 2023-03-07 2023-05-02 智慧眼科技股份有限公司 一种字典转义方法、装置、设备及计算机可读存储介质
CN116048478B (zh) * 2023-03-07 2023-05-30 智慧眼科技股份有限公司 一种字典转义方法、装置、设备及计算机可读存储介质

Similar Documents

Publication Publication Date Title
CN111708539B (zh) 一种应用程序代码转换方法、装置、电子设备和存储介质
Celentano et al. Compiler testing using a sentence generator
US6523171B1 (en) Enhanced source code translator from procedural programming language (PPL) to an object oriented programming language (OOPL)
Moonen Generating robust parsers using island grammars
CN101334728B (zh) 一种基于xml文档描述的界面生成方法和装置
US5307499A (en) Interpretive object-oriented facility which can access pre-compiled classes
CN110149800B (zh) 一种用于处理与源程序的源代码相关联的抽象语法树的装置
KR101213890B1 (ko) 강한 데이터 유형을 이용하여 소프트웨어 프로그램에서음성 인식 문법을 나타내기 위한 방법
CN109086215B (zh) 一种嵌入式软件单元测试用例生成方法及系统
CN115509514B (zh) 一种前端数据模拟方法、装置、设备及介质
KR20010024576A (ko) 기계 기술로부터의 명령군 구조의 시뮬레이터 및 어셈블러생성 방법
CN115357251A (zh) 一种移动端iOS开发数据转模型的方法
CN115202626A (zh) 一种支持多技术栈组件的低代码前端开发方法
KR20080038306A (ko) 널가능과 후 바인딩
CN111858322B (zh) 一种Python语言特征自动识别系统和方法
US20070044080A1 (en) Structure initializers and complex assignment
MXPA03004411A (es) Sistema y metodo para definir y utilizar subclases declarativamente por marcas.
US20060090156A1 (en) Program / method for converting spreadsheet models to callable, compiled routines
CN114706571B (zh) 一种基于dsl的声明式可视化图表开发方法及系统
CN111767033B (zh) 用于机械臂程序开发的编程系统及功能扩展方法
CN112596737A (zh) 一种函数调用关系的扫描方法、系统、设备及存储介质
Saad Data-flow based model analysis: Approach, Implementation and Applications
CN114327415B (zh) 一种用于编译java文件的编译方法及装置
CN111506314B (zh) 项目开发的方法、装置、服务器及介质
CN117472776A (zh) 一种基于ast的框架自适应c++单元测试用例自动化生成方法及系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination