ModelSynchro
Swift 4 的 JSON 模型生成器
描述
从 JSON 自动生成网络模型并保持其更新的方法。
逻辑图.
安装
CocoaPods
ModelSynchro 可通过 CocoaPods 获取。要安装它,只需将以下行添加到您的 Podfile 中:
pod 'ModelSynchro'
在将 ModelSynchro 添加到 Podfile 后,将以下脚本添加到您的构建阶段中作为运行脚本。
"${PODS_ROOT}/ModelSynchro/ModelSynchro/Source/ModelSynchro" -projectDirectory ${SRCROOT}/
接下来,您需要配置一个自定义的 configuration.json 文件并将其添加到项目的根目录中。
{
"authorName" : "Jonathan Samudio",
"companyName" : "Prolific Interactive",
"projectName" : "MyProject",
"language" : "swift",
"outputDirectory" : "MyProject/Models/",
"localJSONDirectory" : [
{
"inputDirectory" : "SampleJSON1/",
"outputDirectory" : "SampleJSONOutput1/"
},
{
"inputDirectory" : "SampleJSON2/",
"outputDirectory" : "SampleJSONOutput2/"
}
],
"endpoints" : [
{
"url" : "https://fbdocs.cn/react-native/movies.json",
"name" : "Movies"
},
{
"url" : "https://fbdocs.cn/react-native/movies.json",
"name" : "Movies"
}
],
"mappedModelNames" : [
{
"jsonKey" : "filters",
"mappedName" : "Filter"
},
{
"jsonKey" : "event_guests",
"mappedName" : "EventGuest"
},
{
"jsonKey" : "event",
"mappedName" : "RegistrationEvent"
},
{
"fileName": "Event",
"mappedName": "MappedEvent"
}
]
}
手动安装
要手动运行应用程序,请运行以下命令。
[Directory to ModelSynchro source]/ModelSynchro -projectDirectory [Root Project Directory]
自定义键
如果从api获取的变量名不是您希望用作模型变量名的名称,那么ModelSynchro允许您标记并更新您的模型变量名。以下面的swift
模型为例。
struct Book: Codable {
let author: String
let id: Int
enum CodingKeys: String, CodingKey {
case author = "author"
case id = "id"
}
}
如果您想将id
更改为bookId
,只需将变量名从id
更改为bookId
,并在变量声明后标记一行//
即可。此外,需要将CodingKeys
中的id
更改为bookId
。
struct Book: Codable {
let author: String
let bookId: Int //
enum CodingKeys: String, CodingKey {
case author = "author"
case bookId = "id"
}
}
自定义模型名称
默认情况下,Swift网络模型的名称设置为本地JSON文件的名称或子模型的JSON对象的键。如果您想将模型的名称更改为其他名称,请将mappedModelNames
对象添加到配置文件中。在此,您可以将JSON键或文件名与其映射名称一起添加。
"mappedModelNames" : [
{
"jsonKey" : "filters",
"mappedName" : "Filter"
},
{
"jsonKey" : "event_guests",
"mappedName" : "EventGuest"
},
{
"jsonKey" : "event",
"mappedName" : "RegistrationEvent"
},
{
"fileName": "Event",
"mappedName": "MappedEvent"
}
]
语言
目前支持将swift
作为生成模型的主语言。objective-c
也提供支持,但目前处于beta版本。要添加自定义语言,请参阅LanguageFormatter协议以创建新的语言格式化程序。