【发布时间】:2019-09-20 09:08:33
【问题描述】:
我正在使用 Moya 传递 API 响应并获取此值。我能够获取对象,但我扩展了基本响应以处理额外参数,但扩展值似乎不起作用。预期的数据可能是一个对象数组,也可能只是一个常规对象。传递此值后,它停止工作并且未获取数据,但除data 之外的所有其他参数(如status、message)都被传递。这是我的基本回复以及我如何使用它
class MaxResponseBase: Codable {
var status: String?
var message: String?
var pagination: Pagination?
var isSucessful: Bool {
return status == "success"
}
struct ErrorMessage {
static let passwordInvalid = " Current password is invalid."
static let loginErrorIncorrectInfo = " Incorrect username/password."
static let loginErrorAccountNotExist = " Invalid request"
}
}
class MaxResponse<T: Codable>: MaxResponseBase {
var data: T?
}
class MaxArrayResponse<T: Codable>: MaxResponseBase {
var data = [T]()
}
这是我的登录 API 调用示例
func signin(email: String, password: String) -> Observable<MaxResponse<AuthResponse>> {
return provider.rx.request(.signin(username: email, password: password))
.filterSuccess()
.mapObject(MaxResponse<AuthResponse>.self)
.asObservable()
}
如何调整它以获取数据对象
JSON
{
"status" : "success",
"data" : {
"is_locked" : false,
"__v" : 0,
"created_at" : "2019-04-15T11:57:12.551Z"
}
}
它也可以是一个数据数组
【问题讨论】:
-
来自服务器的 JSON 是什么样的?
-
@DanielT。我已更新以包含 JSON
-
但是对于这个端点,你的 JSON 有时看起来不一样?
-
这就是 MaxResponse 和 MaxArrayResponse 的区别
-
让它始终是对象中的一个数组。如果响应不是数组,则为解码部分编写一个自定义方法,将对象放入数组中。虽然这是一个奇怪的 api ...