CN114416050A - Swift代码的处理方法、装置、电子设备及存储介质 - Google Patents

Swift代码的处理方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN114416050A
CN114416050A CN202111631179.7A CN202111631179A CN114416050A CN 114416050 A CN114416050 A CN 114416050A CN 202111631179 A CN202111631179 A CN 202111631179A CN 114416050 A CN114416050 A CN 114416050A
Authority
CN
China
Prior art keywords
swift
code
file
data
general
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
CN202111631179.7A
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.)
Beijing 58 Information Technology Co Ltd
Original Assignee
Beijing 58 Information Technology 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 Beijing 58 Information Technology Co Ltd filed Critical Beijing 58 Information Technology Co Ltd
Priority to CN202111631179.7A priority Critical patent/CN114416050A/zh
Publication of CN114416050A publication Critical patent/CN114416050A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Stored Programmes (AREA)

Abstract

本发明实施例提供了一种Swift代码的处理方法、装置、电子设备及存储介质,所述方法包括:通过在代码编译期间,从应用工程文件的Swift代码文件中获取通用Swift代码对应的语法字典,然后根据数据模板将通用Swift代码转换为特定的模板代码,实现对应用工程文件中的通用Swift代码的替换,有效减少了代码编写的工作量,而且能够避免开发人员手写代码导致的类型解析错误问题,保证了应用程序运行的稳定性。

Description

Swift代码的处理方法、装置、电子设备及存储介质
技术领域
本发明涉及代码处理技术领域,特别是涉及一种Swift代码的处理方法、一种Swift代码的处理装置、一种电子设备以及一种计算机可读存储介质。
背景技术
在应用程序工程项目的开发与维护过程中,随着工程项目的不断迭代和功能的增加,工程项目所对应的源代码数据会随着时间的推移增加到一个较大的体积。其中,对于工程项目中涉及通用代码,如模型初始化、列表模型初始化等相关源代码依然需要开发人员全部手动编写,工作重复性高,而且在手动编写的过程中,容易由于类型不匹配等问题导致应用程序崩溃,进一步给源代码的维护增加了成本。
发明内容
本发明实施例是提供一种Swift代码的处理方法、装置、电子设备以及计算机可读存储介质,以解决或部分解决相关技术中无法对源代码文件中通用代码进行处理导致源代码开发、维护效率低下的问题。
本发明实施例公开了一种Swift代码的处理方法,包括:
获取初始应用工程文件,所述初始应用工程文件包括Swift代码文件,所述Swift代码文件包括通用Swift代码;
响应于针对所述初始应用工程文件的编译,获取针对所述Swift代码文件的数据模板,并从所述Swift代码文件获取与所述通用Swift代码对应的数据模型,所述数据模型包括与所述通用Swift代码对应的若干个语法字典;
根据所述数据模板与所述若干个语法字典,生成针对所述通用Swift代码的目标Swift代码;
将所述目标Swift代码替换所述Swift代码文件中的通用Swift代码,生成目标应用工程文件。
可选地,所述从所述Swift代码文件获取与所述通用Swift代码对应的数据模型,包括:
获取所述Swift代码文件的文件标识,以及针对所述Swift代码文件的代码转换函数;
将所述文件标识传入所述代码转换函数,提取所述Swift代码文件中的通用Swift代码,并将所述通用Swift代码转换为与所述Swift代码文件对应的数据模型。
可选地,所述将所述通用Swift代码转换为与所述Swift代码文件对应的数据模型,包括:
从所述通用Swift代码中提取数据键以及与所述数据键对应的数据值;
采用各个所述数据键以及对应的数据值,构建与所述Swift代码文件对应的数据模型。
可选地,所述根据所述数据模板与所述若干个语法字典,生成针对所述通用Swift代码的目标Swift代码,包括:
若所述数据模型包括类型继承关系,判定所述数据模型为待处理的数据结构,则根据所述数据模板与所述若干个语法字典,生成针对所述通用Swift代码的目标Swift代码。
可选地,所述根据所述数据模板与所述若干个语法字典,生成针对所述通用Swift代码的目标Swift代码,包括:
遍历所述数据模型,获取与变量关联的变量Key;
从所述数据模型中提取与所述变量Key对应的语法字典,所述语法字典中包括与所述变量Key对应的变量信息;
将各个所述语法字典的变量信息添加至所述数据模板中,生成针对所述通用Swift代码的目标Swift代码。
可选地,所述变量信息至少包括字段类型以及字段名称,所述将各个所述语法字典的变量信息添加至所述数据模板中,生成针对所述通用Swift代码的目标Swift代码,包括:
将各个所述语法字典的字段类型与字段名称添加至所述数据模板中,生成针对所述通用Swift代码的目标Swift代码。
可选地,还包括:
对所述目标应用工程文件进行编译,生成与所述初始应用工程文件对应的机器语言文件。
本发明实施例还公开了一种Swift代码的处理装置,包括:
工程文件获取模块,用于获取初始应用工程文件,所述初始应用工程文件包括Swift代码文件,所述Swift代码文件包括通用Swift代码;
数据获取模块,用于响应于针对所述初始应用工程文件的编译,获取针对所述Swift代码文件的数据模板,并从所述Swift代码文件获取与所述通用Swift代码对应的数据模型,所述数据模型包括与所述通用Swift代码对应的若干个语法字典;
代码生成模块,用于根据所述数据模板与所述若干个语法字典,生成针对所述通用Swift代码的目标Swift代码;
工程文件生成模块,用于将所述目标Swift代码替换所述Swift代码文件中的通用Swift代码,生成目标应用工程文件。
可选地,所述数据获取模块包括:
函数获取子模块,用于获取所述Swift代码文件的文件标识,以及针对所述Swift代码文件的代码转换函数;
数据模型生成子模块,用于将所述文件标识传入所述代码转换函数,提取所述Swift代码文件中的通用Swift代码,并将所述通用Swift代码转换为与所述Swift代码文件对应的数据模型。
可选地,所述数据模型生成子模块具体用于:
从所述通用Swift代码中提取数据键以及与所述数据键对应的数据值;
采用各个所述数据键以及对应的数据值,构建与所述Swift代码文件对应的数据模型。
可选地,所述代码生成模块具体用于:
若所述数据模型包括类型继承关系,判定所述数据模型为待处理的数据结构,则根据所述数据模板与所述若干个语法字典,生成针对所述通用Swift代码的目标Swift代码。
可选地,所述代码生成模块包括:
变量Key获取子模块,用于遍历所述数据模型,获取与变量关联的变量Key;
语法字典提取子模块,用于从所述数据模型中提取与所述变量Key对应的语法字典,所述语法字典中包括与所述变量Key对应的变量信息;
代码生成子模块,用于将各个所述语法字典的变量信息添加至所述数据模板中,生成针对所述通用Swift代码的目标Swift代码。
可选地,所述变量信息至少包括字段类型以及字段名称,所述代码生成子模块具体用于:
将各个所述语法字典的字段类型与字段名称添加至所述数据模板中,生成针对所述通用Swift代码的目标Swift代码。
可选地,还包括:
编译模块,用于对所述目标应用工程文件进行编译,生成与所述初始应用工程文件对应的机器语言文件。
本发明实施例还公开了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,所述处理器、所述通信接口以及所述存储器通过所述通信总线完成相互间的通信;
所述存储器,用于存放计算机程序;
所述处理器,用于执行存储器上所存放的程序时,实现如本发明实施例所述的方法。
本发明实施例还公开了一种计算机可读存储介质,其上存储有指令,当由一个或多个处理器执行时,使得所述处理器执行如本发明实施例所述的方法。
本发明实施例包括以下优点:
在本发明实施例中,在对应用工程文件进行编译的过程中,可以从应用工程文件中获取Swift代码文件,并在编译的过程中,获取针对Swift代码文件的数据模板,并从Swift代码文件中获取与通用Swift代码对应的数据模型,其中,该数据模型中可以包括与通用Swift代码对应的若干个语法字典,接着可以根据数据模板与各个语法字典,生成针对Swift代码文件的目标Swift代码文件的目标Swift代码,然后可以将目标Swift代码替换Swift代码文件中的通用Swift代码,通过在代码编译期间,从应用工程文件的Swift代码文件中获取通用Swift代码对应的语法字典,然后根据数据模板将通用Swift代码转换为特定的模板代码,实现对应用工程文件中的通用Swift代码的替换,有效减少了代码编写的工作量,而且能够避免开发人员手写代码导致的类型解析错误问题,保证了应用程序运行的稳定性。
附图说明
图1是本发明实施例中提供的一种Swift代码的处理方法的步骤流程图;
图2是本发明实施例中提供的一种Swift代码的处理装置的结构框图;
图3是本发明实施例中提供的一种电子设备的框图;
图4是本发明实施例中提供的一种计算机可读存储介质的示意图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
LLVM(Low Level Virtual Machine,底层虚拟机)是构架编译器(compiler)的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)以及空闲时间(idle-time),对开发者保持开放,并兼容已有脚本。在应用工程的开发过程中,LLVM可以作为构架编译器(complile)的框架系统,用于IOS源代码的整个编译过程,可以包括预编译、中间语言生成以及编译后端等,并最终将源码编译成可执行的机器语言。其中,sourcekitd为LLVM中提供的工具集之一,其可以用于Swift语言在IDE(Integrated Development Environment,集成开发环境)_中的展示以及处理,如源码解析、语法高亮、排版、自动补全等等。
作为一种示例,开发人员在对应用程序的工程文件进行代码编写的过程中,涉及Swift一些通用代码的手动编写,如模型初始化、列表模板初始化等涉及通用代码的内容,均需要开发人员手动编写,无法自动生成相应代码的能力,导致开发人员工作重复性高,同时由于开发人员手动编写存在主观性的错误,容易出现编写类型不匹配导致应用程序在运行过程中出现崩溃的问题,降低了应用程序运行的稳定性。
对此,本发明实施例的核心发明点之一在于在对应用程序工程文件进行编译的过程中,通过LLVM的sourcekitd工具集获取文件中Swift代码中涉及通用功能的Swift代码,并根据其对应的语法字典转换为特定的模板代码重新写入工程文件中,实现Swift代码的处理,具体的,在对应用工程文件进行编译的过程中,可以从应用工程文件中获取Swift代码文件,并在编译的过程中,获取针对Swift代码文件的数据模板,并从Swift代码文件中获取与通用Swift代码对应的数据模型,其中,该数据模型中可以包括与通用Swift代码对应的若干个语法字典,接着可以根据数据模板与各个语法字典,生成针对Swift代码文件的目标Swift代码文件的目标Swift代码,然后可以将目标Swift代码替换Swift代码文件中的通用Swift代码,通过在代码编译期间,从应用工程文件的Swift代码文件中获取通用Swift代码对应的语法字典,然后根据数据模板将通用Swift代码转换为特定的模板代码,实现对应用工程文件中的通用Swift代码的替换,有效减少了代码编写的工作量,而且能够避免开发人员手写代码导致的类型解析错误问题,保证了应用程序运行的稳定性。
具体的,参照图1,示出了本发明实施例中提供的一种Swift代码的处理方法的步骤流程图,具体可以包括如下步骤:
步骤101,获取初始应用工程文件,所述初始应用工程文件包括Swift代码文件,所述Swift代码文件包括通用Swift代码;
对于应用工程文件,其可以为开发人员在开发工具中进行开发的某一个应用程序对应的工程项目文件,如开发人员在LLVM中开发的应用于IOS或macOS的应用程序等等。其中,在应用工程文件中可以包括Swift代码文件,在该Swift代码文件中可以包括应用工程文件中相关的通用Swift代码。对于通用Swift代码,其可以为应用程序中涉及通用功能的代码,如模型初始化、列表模板初始化等相关实现代码,对于这类通用的Swift代码,可能是多个应用功能均对应于相同的Swift代码,若开发人员针对每个应用功能均编写一次通用的Swift代码,无疑会严重增加了开发人员的工作量,且无法保证编写过程中类型的匹配性,影响应用程序运行的稳定性。
可选地,对于Swift代码的处理,可以基于LLVM的SourceKitd工具集从Swift源代码层面进行处理,包括对源代码解析、语法高亮、排版、自动补全以及跨语言头文件生成等等,即本发明实施例中以基于LLVM的SourceKitd工具集对Swift代码进行处理为例进行示例性说明,可以理解的是,本发明对此不作限制。
步骤102,响应于针对所述初始应用工程文件的编译,获取针对所述Swift代码文件的数据模板,并从所述Swift代码文件获取与所述通用Swift代码对应的数据模型,所述数据模型包括与所述通用Swift代码对应的若干个语法字典;
可选地,在应用工程文件的开发过程,涉及业务数据的获取,对于业务数据的获取往往是客户端向后端发送对应的请求,并接收后端返回的业务数据。其中,业务数据可以为json数据,客户端可以将json数据转换成对应的字典,由于字典本身数据类型比较灵活,当层次嵌套较深时容易导致获取数据值的方式过于复杂,影响开发人员的代码编写。对此,通过数据模板可以有效解决代码编写的难度,数据模板可以为针对特定业务场景的数据结构,在该数据结构中可以定义适合业务场景的字段名称以及字段类型,从而保证业务数据在使用上、传递上相较字典更为方便,提高了代码的稳定性。
在本发明实施例中,在通过SourceKitd对应用工程文件进行编译的过程中,可以获取针对Swift代码文件的数据模板,并从Swift代码文件中获取与通用Swift代码对应的数据模型,以便通过数据模板与数据模型对通用Swift代码进行处理。其中,数据模型可以包括需要添加至数据模板中的内容,其可以包括与不同变量对应的通用Swift代码对应的语法字典,即一个Swift代码文件可以对应一个数据模型,一个数据模型中可以包括多种通用Swift代码对应的语法字典。
可选地,对于字典,其可以为一个容器,可以无序地将多个数据以键值对的方式进行存储,每个值都与一个唯一的键相关联,并将数据存储在无需列表中作为集合,则数据模型中可以包括Swift代码文件中相关数据值与数据键之间的关联关系,语法字典中可以包括通用Swift代码中相关数据值与数据键之间的关联关系等,从而通过确定与Swift代码对应的字典,有利于从字典中提取需要添加至数据模板中的内容。
对于数据模型的获取,可以先获取Swift代码文件的文件标识,以及针对Swift代码文件的代码转换函数,接着将文件标识传入代码转换函数,提取Swift代码文件中的通用Swift代码,并将通用Swift代码转换为与Swift代码文件对应的数据模型。具体的,文件标识可以为Swift代码文件的文件名称;代码转换函数可以为LLVM中的sourceKitd提供的转换API(Application Programming Interface,应用程序接口)所对应的执行函数,则可以将Swift代码文件的文件名称作为参数,输入转换API以通过相应的转换函数输出该Swift代码文件对应的数据模型。
在一种示例中,通过SourceKitd对应用工程文件进行编译的过程中,可以先获取Swift代码文件以及该文件的文件名称,可以调用sourcekitd对应的API,以通过dlsym(dlopen("sourcekitd.framework/Versions/A/sourcekitd",RTLD_LAZY),"sourcekitd_response_get_value")获取Swift代码文件转换为数据模型的代码转换函数,接着将Swift代码文件的文件名称传入该函数,从通用Swift代码中提取数据键以及与数据键对应的数据值,并采用各个数据键以及对应的数据值,构建与Swift代码文件对应的数据模型,然后输出对应的数据模型,以便进一步根据数据模板与数据模型中的若干个语法字典,对Swift代码进行处理,实现Swift代码的替换。
步骤103,根据所述数据模板与所述若干个语法字典,生成针对所述通用Swift代码的目标Swift代码;
在根据数据模板与语法字典进行Swift代码的处理之前,可以先对数据模型的数据结构体进行判断,确定数据模型的数据结构体是否满足相应的协议。具体的,可以通过检测数据模型中是否包含类型继承关系,若数据模型中包括类型继承关系,表明该数据模型为待处理的数据结构,则可以根据数据模板与若干个语法字典,生成针对通用Swift代码的目标Swift代码;若数据模型中不包含类型继承关系,表明该数据模型不是待处理的数据结构,不执行Swift代码的处理。
可选地,对于初始化协议,其可以为一个固定的协议名称,通过该协议名称可以有利于标记数据模型是否为待处理的数据结构,则当数据模型中包含该协议名称时,表征数据模型为待处理的数据结构,可以进一步从数据模型中确定语法字典。
在具体实现中,可以通过遍历数据模型,获取与变量关联的变量Key,接着从数据模型中提取与变量Key对应的语法字典,语法字典中包括与变量Key对应的变量信息,然后将各个语法字典的变量信息添加至数据模板中,生成针对通用Swift代码的目标Swift代码。其中,变量信息可以包括变量的变量名称、变量类型等,则可以将各个语法字典的字段类型与字段名称添加至数据模板中,生成针对通用Swift代码的目标Swift代码。
其中,在数据模型中,可以包括不同的实例变量对应的语法字典,且每个实例变量可以对应一个语法字典,在该语法字典中通过键值对的方式存储了变量名称、变量名称的长度、变量标识、字符串值、变量类型等等。对于变量类型,其可以为对应的语法字典中所涉及的变量的语法类型,可以包括:Int是整型、Double和Float是浮点型、Bool是布尔型以及String是字符串;变量名称可以为通用Swift代码对应的语法字典中所涉及的变量的变量名称,从而当确定了数据模型满足了初始化协议后,可以从数据模型中提取与变量相关的变量信息,并将变量信息添加至数据模板中,生成对应的目标Swift代码,从而通过数据模板、数据模型将应用工程文件中的通用Swift代码转换为特定的模板代码,有效减少了开发人员对通用的swift代码进行编写的工作量,以及避免了手动编写导致的类型不匹配问题。
步骤104,将所述目标Swift代码替换所述Swift代码文件中的通用Swift代码,生成目标应用工程文件。
当通过数据模板以及Swift代码文件对应的语法字典,将应用工程文件中涉及通用功能的通用Swift代码转换为特定的模板代码(即目标Swift代码)后,可以将模板代码写入当前编译的应用工程文件中,替换原有的通用Swift代码,得到新的应用工程文件。同时,可以继续对应用工程文件进行编译,生成对应的机器语言文件,从而在对应用工程文件进行代码编译的过程,可以从应用工程文件的Swift代码文件中获取通用Swift代码对应的语法字典,然后根据数据模板将通用Swift代码转换为特定的模板代码,实现应用工程文件中Swift代码的替换,进而通过一边编译以便进行代码转换,不仅有效减少了代码编写的工作量,避免开发人员手写代码导致的类型解析错误问题,保证了应用程序运行的稳定性,而且通过“编译+代码转换”的方式可以提高代码编译的效率。
需要说明的是,本发明实施例包括但不限于上述示例,可以理解的是,在本发明实施例的思想指导下,本领域技术人员还可以根据实际需求进行设置,本发明对此不作限制。
在本发明实施例中,在对应用工程文件进行编译的过程中,可以从应用工程文件中获取Swift代码文件,并在编译的过程中,从Swift代码文件中获取与通用Swift代码对应的数据模型以及针对Swift代码文件的数据模板,其中,该数据模型中可以包括与通用Swift代码对应的若干个语法字典,接着可以根据数据模板与各个语法字典,生成针对Swift代码文件的目标Swift代码文件的目标Swift代码,然后可以将目标Swift代码替换Swift代码文件中的通用Swift代码,通过在代码编译期间,从应用工程文件的Swift代码文件中获取通用Swift代码对应的语法字典,然后根据数据模板将通用Swift代码转换为特定的模板代码,实现应用工程文件中Swift代码的替换,有效减少了代码编写的工作量,而且能够避免开发人员手写代码导致的类型解析错误问题,保证了应用程序运行的稳定性。
为了使本领域技术人员更好地理解本发明实施例的技术方案,下面通过一个例子进行示例性说明。
开发人员可以在LLVM中开发应用于IOS或macOS的应用程序,当通过基于LLVM的SourceKitd工具集进行相关应用程序的应用工程文件的编译时,可以实现一边编译一边对工程文件中涉及通用功能的Swift代码进行转换,以减少开发人员对通用Swift代码的编写。
具体的,假设HunTianSwiftLint为数据模板,其相关代码可以为:
Figure BDA0003440011810000111
在利用SourceKitd进行编译的过程中,可以获取应用工程文件中与Swift代码文件对应的数据模型,接着可以先通过判定数据模型是否遵循WBSwiftyJSONAutoGenertorCode协议的方式,确定该数据模型是否为待处理的数据结构,若是,则可以从数据模型中提取与变量相关的语法字典,并从语法字典中提取对应的变量信息,包括提取各个变量对应的变量类型、变量名称等,以构建对应的目标Swift代码。接着可以根据该语法字典中的诸如变量类型(typename)为“"key.typename":"Bool?"”以及变量名称(name)为“"key.name":"three"”等存储的变量信息,通过对变量信息进行拼接的方式自动生成对应的初始化方法,如three=serverDictionary["three"]as?Bool,然后将该初始化方法添加至数据模板中,生成对应的目标Swift代码。
例如,假设在相关代码中可以包括了one、two以及three三个变量,分别对应的变量类型为String、Int以及Bool?,则对应的目标Swift代码可以为:
Figure BDA0003440011810000112
Figure BDA0003440011810000121
当完成Swift代码转换后,可以将自动生成的代码写入到当前编译的应用工程文件中,替换原有的通用Swift代码,并继续进行编译,从而通过在代码编译期间,从应用工程文件的Swift代码文件中获取通用Swift代码对应的语法字典,然后根据数据模板将通用Swift代码转换为特定的模板代码,实现应用工程文件中Swift代码的替换,有效减少了代码编写的工作量,而且能够避免开发人员手写代码导致的类型解析错误问题,保证了应用程序运行的稳定性。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
参照图2,示出了本发明实施例中提供的一种Swift代码的处理装置的结构框图,具体可以包括如下模块:
工程文件获取模块201,用于获取初始应用工程文件,所述初始应用工程文件包括Swift代码文件,所述Swift代码文件包括通用Swift代码;
数据获取模块202,用于响应于针对所述初始应用工程文件的编译,获取针对所述Swift代码文件的数据模板,并从所述Swift代码文件获取与所述通用Swift代码对应的数据模型,所述数据模型包括与所述通用Swift代码对应的若干个语法字典;
代码生成模块203,用于根据所述数据模板与所述若干个语法字典,生成针对所述通用Swift代码的目标Swift代码;
工程文件生成模块204,用于将所述目标Swift代码替换所述Swift代码文件中的通用Swift代码,生成目标应用工程文件。
在一种可选实施例中,所述数据获取模块202包括:
函数获取子模块,用于获取所述Swift代码文件的文件标识,以及针对所述Swift代码文件的代码转换函数;
数据模型生成子模块,用于将所述文件标识传入所述代码转换函数,提取所述Swift代码文件中的通用Swift代码,并将所述通用Swift代码转换为与所述Swift代码文件对应的数据模型。
在一种可选实施例中,所述数据模型生成子模块具体用于:
从所述通用Swift代码中提取数据键以及与所述数据键对应的数据值;
采用各个所述数据键以及对应的数据值,构建与所述Swift代码文件对应的数据模型。
在一种可选实施例中,所述代码生成模块203具体用于:
若所述数据模型包括类型继承关系,判定所述数据模型为待处理的数据结构,则根据所述数据模板与所述若干个语法字典,生成针对所述通用Swift代码的目标Swift代码。
在一种可选实施例中,所述代码生成模块203包括:
变量Key获取子模块,用于遍历所述数据模型,获取与变量关联的变量Key;
语法字典提取子模块,用于从所述数据模型中提取与所述变量Key对应的语法字典,所述语法字典中包括与所述变量Key对应的变量信息;
代码生成子模块,用于将各个所述语法字典的变量信息添加至所述数据模板中,生成针对所述通用Swift代码的目标Swift代码。
在一种可选实施例中,所述变量信息至少包括字段类型以及字段名称,所述代码生成子模块具体用于:
将各个所述语法字典的字段类型与字段名称添加至所述数据模板中,生成针对所述通用Swift代码的目标Swift代码。
在一种可选实施例中,还包括:
编译模块,用于对所述目标应用工程文件进行编译,生成与所述初始应用工程文件对应的机器语言文件。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
另外,本发明实施例还提供一种电子设备,如图3所示,包括处理器301、通信接口302、存储器303和通信总线304,其中,处理器301,通信接口302,存储器303通过通信总线304完成相互间的通信,
存储器303,用于存放计算机程序;
处理器301,用于执行存储器303上所存放的程序时,实现如下步骤:
获取初始应用工程文件,所述初始应用工程文件包括Swift代码文件,所述Swift代码文件包括通用Swift代码;
响应于针对所述初始应用工程文件的编译,获取针对所述Swift代码文件的数据模板,并从所述Swift代码文件获取与所述通用Swift代码对应的数据模型,所述数据模型包括与所述通用Swift代码对应的若干个语法字典;
根据所述数据模板与所述若干个语法字典,生成针对所述通用Swift代码的目标Swift代码;
将所述目标Swift代码替换所述Swift代码文件中的通用Swift代码,生成目标应用工程文件。
在一种可选实施例中,所述从所述Swift代码文件获取与所述通用Swift代码对应的数据模型,包括:
获取所述Swift代码文件的文件标识,以及针对所述Swift代码文件的代码转换函数;
将所述文件标识传入所述代码转换函数,提取所述Swift代码文件中的通用Swift代码,并将所述通用Swift代码转换为与所述Swift代码文件对应的数据模型。
在一种可选实施例中,所述将所述通用Swift代码转换为与所述Swift代码文件对应的数据模型,包括:
从所述通用Swift代码中提取数据键以及与所述数据键对应的数据值;
采用各个所述数据键以及对应的数据值,构建与所述Swift代码文件对应的数据模型。
在一种可选实施例中,所述根据所述数据模板与所述若干个语法字典,生成针对所述通用Swift代码的目标Swift代码,包括:
若所述数据模型包括类型继承关系,判定所述数据模型为待处理的数据结构,则根据所述数据模板与所述若干个语法字典,生成针对所述通用Swift代码的目标Swift代码。
在一种可选实施例中,所述根据所述数据模板与所述若干个语法字典,生成针对所述通用Swift代码的目标Swift代码,包括:
遍历所述数据模型,获取与变量关联的变量Key;
从所述数据模型中提取与所述变量Key对应的语法字典,所述语法字典中包括与所述变量Key对应的变量信息;
将各个所述语法字典的变量信息添加至所述数据模板中,生成针对所述通用Swift代码的目标Swift代码。
在一种可选实施例中,所述变量信息至少包括字段类型以及字段名称,所述将各个所述语法字典的变量信息添加至所述数据模板中,生成针对所述通用Swift代码的目标Swift代码,包括:
将各个所述语法字典的字段类型与字段名称添加至所述数据模板中,生成针对所述通用Swift代码的目标Swift代码。
在一种可选实施例中,还包括:
对所述目标应用工程文件进行编译,生成与所述初始应用工程文件对应的机器语言文件。
上述终端提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,简称PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,简称EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述终端与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,简称RAM),也可以包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
如图4所示,在本发明提供的又一实施例中,还提供了一种计算机可读存储介质401,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述实施例中所述的Swift代码的处理方法。
在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中所述的Swift代码的处理方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

Claims (10)

1.一种Swift代码的处理方法,其特征在于,包括:
获取初始应用工程文件,所述初始应用工程文件包括Swift代码文件,所述Swift代码文件包括通用Swift代码;
响应于针对所述初始应用工程文件的编译,获取针对所述Swift代码文件的数据模板,并从所述Swift代码文件获取与所述通用Swift代码对应的数据模型,所述数据模型包括与所述通用Swift代码对应的若干个语法字典;
根据所述数据模板与所述若干个语法字典,生成针对所述通用Swift代码的目标Swift代码;
将所述目标Swift代码替换所述Swift代码文件中的通用Swift代码,生成目标应用工程文件。
2.根据权利要求1所述的方法,其特征在于,所述从所述Swift代码文件获取与所述通用Swift代码对应的数据模型,包括:
获取所述Swift代码文件的文件标识,以及针对所述Swift代码文件的代码转换函数;
将所述文件标识传入所述代码转换函数,提取所述Swift代码文件中的通用Swift代码,并将所述通用Swift代码转换为与所述Swift代码文件对应的数据模型。
3.根据权利要求2所述的方法,其特征在于,所述将所述通用Swift代码转换为与所述Swift代码文件对应的数据模型,包括:
从所述通用Swift代码中提取数据键以及与所述数据键对应的数据值;
采用各个所述数据键以及对应的数据值,构建与所述Swift代码文件对应的数据模型。
4.根据权利要求1或2或3任一所述的方法,其特征在于,所述根据所述数据模板与所述若干个语法字典,生成针对所述通用Swift代码的目标Swift代码,包括:
若所述数据模型包括类型继承关系,判定所述数据模型为待处理的数据结构,则根据所述数据模板与所述若干个语法字典,生成针对所述通用Swift代码的目标Swift代码。
5.根据权利要求1所述的方法,其特征在于,所述根据所述数据模板与所述若干个语法字典,生成针对所述通用Swift代码的目标Swift代码,包括:
遍历所述数据模型,获取与变量关联的变量Key;
从所述数据模型中提取与所述变量Key对应的语法字典,所述语法字典中包括与所述变量Key对应的变量信息;
将各个所述语法字典的变量信息添加至所述数据模板中,生成针对所述通用Swift代码的目标Swift代码。
6.根据权利要求5所述的方法,其特征在于,所述变量信息至少包括字段类型以及字段名称,所述将各个所述语法字典的变量信息添加至所述数据模板中,生成针对所述通用Swift代码的目标Swift代码,包括:
将各个所述语法字典的字段类型与字段名称添加至所述数据模板中,生成针对所述通用Swift代码的目标Swift代码。
7.根据权利要求1所述的方法,其特征在于,还包括:
对所述目标应用工程文件进行编译,生成与所述初始应用工程文件对应的机器语言文件。
8.一种Swift代码的处理装置,其特征在于,包括:
工程文件获取模块,用于获取初始应用工程文件,所述初始应用工程文件包括Swift代码文件,所述Swift代码文件包括通用Swift代码;
数据获取模块,用于响应于针对所述初始应用工程文件的编译,获取针对所述Swift代码文件的数据模板,并从所述Swift代码文件获取与所述通用Swift代码对应的数据模型,所述数据模型包括与所述通用Swift代码对应的若干个语法字典;
代码生成模块,用于根据所述数据模板与所述若干个语法字典,生成针对所述通用Swift代码的目标Swift代码;
工程文件生成模块,用于将所述目标Swift代码替换所述Swift代码文件中的通用Swift代码,生成目标应用工程文件。
9.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,所述处理器、所述通信接口以及所述存储器通过所述通信总线完成相互间的通信;
所述存储器,用于存放计算机程序;
所述处理器,用于执行存储器上所存放的程序时,实现如权利要求1-7任一项所述的方法。
10.一种计算机可读存储介质,其上存储有指令,当由一个或多个处理器执行时,使得所述处理器执行如权利要求1-7任一项所述的方法。
CN202111631179.7A 2021-12-28 2021-12-28 Swift代码的处理方法、装置、电子设备及存储介质 Pending CN114416050A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111631179.7A CN114416050A (zh) 2021-12-28 2021-12-28 Swift代码的处理方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111631179.7A CN114416050A (zh) 2021-12-28 2021-12-28 Swift代码的处理方法、装置、电子设备及存储介质

Publications (1)

Publication Number Publication Date
CN114416050A true CN114416050A (zh) 2022-04-29

Family

ID=81269350

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111631179.7A Pending CN114416050A (zh) 2021-12-28 2021-12-28 Swift代码的处理方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN114416050A (zh)

Similar Documents

Publication Publication Date Title
US11481201B2 (en) Integrated development environment for developing and compiling query language schemas for application program interfaces
US9122540B2 (en) Transformation of computer programs and eliminating errors
US8364696B2 (en) Efficient incremental parsing of context sensitive programming languages
US10592220B2 (en) Metadata-driven binding of converted source code to original source code
CN108595171B (zh) 对象的模型生成方法、装置、设备及存储介质
CN116069325B (zh) 前端项目构建方法、装置、设备及计算机可读存储介质
CN113504900A (zh) 一种编程语言转换方法和装置
CN108920566B (zh) 一种对SQLite数据库的操作方法、装置及设备
US20220027139A1 (en) Application program updating method, apparatus, system, medium and device
CN114153459A (zh) 接口文档生成方法及装置
CN114625844A (zh) 一种代码搜索方法、装置及设备
CN117113347A (zh) 一种大规模代码数据特征提取方法及系统
CN115509514A (zh) 一种前端数据模拟方法、装置、设备及介质
WO2021208867A1 (zh) 一种跨平台的代码转换方法及设备
US9747085B2 (en) Source code generation from prototype source
JP6651974B2 (ja) 情報処理装置、コンパイル方法及びコンパイラプログラム
US20140359258A1 (en) Declarative Configuration Elements
CN115951890A (zh) 一种不同前端框架间的代码转换方法及系统及装置
CN114416050A (zh) Swift代码的处理方法、装置、电子设备及存储介质
CN116185492A (zh) 多平台sdk构建方法、装置、设备、系统及计算机可读介质
CN114816364A (zh) 基于Swagger动态生成范本文件的方法、装置及应用
CN111796832B (zh) 热补丁文件生成方法、装置、设备及存储介质
CN111399842B (zh) 一种代码编译方法及装置
CN112860233B (zh) 目标语法树的生成方法以及相关设备
CN112860239A (zh) 一种数据类型转换方法、装置、电子设备及存储介质

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