ObjectMapper 解析通用对象
ObjectMapper parsing generic object
我在使用 ObjectMapper 解析通用对象时出错
这是我的 类:
class BaseResponse<T>: NSObject, Mappable {
var isSuccess: Bool!
var data: T?
required init?(map: Map) {
super.init()
self.mapping(map: map)
}
func mapping(map: Map) {
isSuccess <- map["success"]
data <- map["data"]
}
}
class Login: NSObject, Mappable {
var isProfileUpdated: Bool?
var role: String!
var profileId: Int!
var email: String!
override func mapping(map: Map) {
isProfileUpdated <- map["profile_updated"]
role <- map["role"]
profileId <- map["id"]
email <- map["email"]
}
}
我解析了这个 json:
{
"token" : "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1MTU4MDkzODAuNjg4LCJpYXQiOjE1MTU3MjI5ODAuNjg4LCJpc3MiOiJleWUtc29sdXRpb24udm4iLCJpZCI6MTgsInJvbGUiOiJlbXBsb3llZSIsInNfaWQiOjg5LCJwX2lkIjoxMX0.v8iEgEXlXGzv5HmDvWs-tUNNYZFBQqCtTLaUkgqXqM0",
"data" : {
"email" : "at.ce90@gmail.com",
"id" : 18,
"profile_updated" : false,
"updated_at" : "2018-01-08T05:51:19.045Z",
"created_at" : "2018-01-08T05:50:51.517Z",
"avatar_id" : null,
"referral_code" : "BFHw6I",
"active" : true,
"role" : "employee",
"referral_id" : null
},
"success" : true
}
通过这个函数:
let response = Mapper<BaseResponse<Login>>().map(JSONString: jsonString)
response.data = 解析后为零。我不知道。有人知道为什么吗?
我找到了解决方案:
class BaseResponse<T>: NSObject, Mappable where T: Mappable {
var isSuccess: Bool!
var data: T?
required init?(map: Map) {
super.init()
self.mapping(map: map)
}
func mapping(map: Map) {
isSuccess <- map["success"]
data <- map["data"]
}
}
一切正常。希望这对像我这样的人有所帮助。
根据 their 文档,您可以将 T 声明为可映射的。所以你会得到这样的东西:
class BaseResponse<T: Mappable>:Mappable {
var data: T?
required init?(map: Map) {
self.init()
}
func mapping(map: Map) {
data <- map["data"]
}
}
我在使用 ObjectMapper 解析通用对象时出错 这是我的 类:
class BaseResponse<T>: NSObject, Mappable {
var isSuccess: Bool!
var data: T?
required init?(map: Map) {
super.init()
self.mapping(map: map)
}
func mapping(map: Map) {
isSuccess <- map["success"]
data <- map["data"]
}
}
class Login: NSObject, Mappable {
var isProfileUpdated: Bool?
var role: String!
var profileId: Int!
var email: String!
override func mapping(map: Map) {
isProfileUpdated <- map["profile_updated"]
role <- map["role"]
profileId <- map["id"]
email <- map["email"]
}
}
我解析了这个 json:
{
"token" : "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1MTU4MDkzODAuNjg4LCJpYXQiOjE1MTU3MjI5ODAuNjg4LCJpc3MiOiJleWUtc29sdXRpb24udm4iLCJpZCI6MTgsInJvbGUiOiJlbXBsb3llZSIsInNfaWQiOjg5LCJwX2lkIjoxMX0.v8iEgEXlXGzv5HmDvWs-tUNNYZFBQqCtTLaUkgqXqM0",
"data" : {
"email" : "at.ce90@gmail.com",
"id" : 18,
"profile_updated" : false,
"updated_at" : "2018-01-08T05:51:19.045Z",
"created_at" : "2018-01-08T05:50:51.517Z",
"avatar_id" : null,
"referral_code" : "BFHw6I",
"active" : true,
"role" : "employee",
"referral_id" : null
},
"success" : true
}
通过这个函数:
let response = Mapper<BaseResponse<Login>>().map(JSONString: jsonString)
response.data = 解析后为零。我不知道。有人知道为什么吗?
我找到了解决方案:
class BaseResponse<T>: NSObject, Mappable where T: Mappable {
var isSuccess: Bool!
var data: T?
required init?(map: Map) {
super.init()
self.mapping(map: map)
}
func mapping(map: Map) {
isSuccess <- map["success"]
data <- map["data"]
}
}
一切正常。希望这对像我这样的人有所帮助。
根据 their 文档,您可以将 T 声明为可映射的。所以你会得到这样的东西:
class BaseResponse<T: Mappable>:Mappable {
var data: T?
required init?(map: Map) {
self.init()
}
func mapping(map: Map) {
data <- map["data"]
}
}