AlamofireCodable简介
AlamofireCodable:Alamofire的扩展,可使用Codable自动将JSON响应数据转换为快速对象。 该项目受到流行的AlamofireObjectMapper的极大启发。
安装
通过将以下行添加到Podfile中,可以使用CocoaPods将AlamofireCodable添加到您的项目中:
pod 'AlamofireCodable'
例
要运行示例项目,请克隆存储库,然后首先从Example目录运行pod install
。
要求
Xcode 9 +,Swift 4+
用法
给定一个以以下形式返回天气数据的URL:
{
"data":{
"location":"Toronto, Canada",
"three_day_forecast":[
{
"conditions":"Partly cloudy",
"day":"Monday",
"temperature":20
},
{
"conditions":"Showers",
"day":"Tuesday",
"temperature":22
},
{
"conditions":"Sunny",
"day":"Wednesday",
"temperature":28
}
]
}
}
您可以按以下方式使用扩展名:
进口AlamofireCodable
让表格= WeatherForm()
Alamofire.request(
form.url,
方法:HTTPMethod.get,
参数:form.parameters(),
编码:form.encoding(),
标头:form.headers()
)
.responseObject(keyPath:“ data”,completionHandler:{(响应:DataResponse )在
切换response.result {
案例。成功(让对象):
debugPrint(“🌹”,object.location)
案例。失败(让错误):
debugPrint(“🌹”,error.localizedDescription)
}
})
完成处理程序中的Weather
对象是您定义的自定义对象。 唯一的要求是对象必须符合Codable
协议。 在上面的示例中, Weather
对象如下所示:
{
“数据”:{
“位置”:“加拿大多伦多”,
“ three_day_forecast”:[
{
“条件”:“部分多云”,
“ day”:“星期一”,
“温度”:20
},
{
“ conditions”:“ Showers”,
“ day”:“星期二”,
“温度”:22
},
{
“ conditions”:“晴天”,
“ day”:“星期三”,
“温度”:28
}
]
}
}
该扩展使用泛型允许您创建自己的自定义响应对象。 以下是responseObject
函数定义。 只需用您的自定义响应对象替换完成处理器中的T
,扩展即可处理其余的内容:
公共函数responseObject (队列:DispatchQueue?= nil,keyPath:String?= nil,completionHandler:@转义(DataResponse )-> Void)-> Self
responseObject
函数具有2个可选参数和一个必需的completionHandler:
-
queue
:分派完成处理程序的队列。 -
keyPath
:应该执行对象映射的JSON的密钥路径 - completeHandler:请求结束并且JSONDecoder解码了数据后将执行的闭包。
轻松解码嵌套对象
AlamofireCodable支持键内的点表示法,以便轻松映射嵌套对象。 给定以下JSON字符串:
{
“数据”:{
“位置”:“加拿大多伦多”,
“ three_day_forecast”:[
{
“条件”:“部分多云”,
“ day”:“星期一”,
“温度”:20
},
{
“ conditions”:“ Showers”,
“ day”:“星期二”,
“温度”:22
},
{
“ conditions”:“晴天”,
“ day”:“星期三”,
“温度”:28
}
]
}
}
您可以按以下方式访问嵌套对象:
让表格= WeatherForm()
Alamofire.request(
form.url,
方法:HTTPMethod.get,
参数:form.parameters(),
编码:form.encoding(),
标头:form.headers()
)
.responseObject(completionHandler:{(响应:DataResponse )在
切换response.result {
大小写.success(let root):
debugPrint(“🌹”,根)
案例。失败(让错误):
debugPrint(“🌹”,error.localizedDescription)
}
})
关键路径
keyPath
变量用于向下钻取JSON响应,并且仅映射在该keyPath
找到的数据。 它支持诸如data.three_day_forecast
嵌套值,以在JSON响应中向下钻取多个级别。
让表格= WeatherForm()
Alamofire.request(
form.url,
方法:HTTPMethod.get,
参数:form.parameters(),
编码:form.encoding(),
标头:form.headers()
)
.responseArray(keyPath:“ data.three_day_forecast”,completeHandler:{(响应:DataResponse )
切换response.result {
大小写.success(let array):
debugPrint(“🌹”,数组)
案例。失败(让错误):
debugPrint(“🌹”,error.localizedDescription)
}
})
数组响应
如果您有一个端点以Array
形式返回数据,则可以使用以下函数将其映射:
公共函数responseArray (队列:DispatchQueue?= nil,keyPath:String?= nil,completionHandler:@转义(DataResponse )-> Void)-> Self
例如,如果您的端点返回以下内容:
[
{
"conditions": "Partly cloudy",
"day" : "Monday",
"temperature": 20
},
{
"conditions": "Showers",
"day" : "Tuesday",
"temperature": 22
},
{
"conditions": "Sunny",
"day" : "Wednesday",
"temperature": 28
}
]
您可以请求并映射它,如下所示:
让表格= WeatherForm()
Alamofire.request(
form.url,
方法:HTTPMethod.get,
参数:form.parameters(),
编码:form.encoding(),
标头:form.headers()
)
.responseArray(keyPath:“ data.three_day_forecast”,completeHandler:{(响应:DataResponse )
切换response.result {
大小写.success(let array):
debugPrint(“🌹”,数组)
案例。失败(让错误):
debugPrint(“🌹”,error.localizedDescription)
}
})