В настоящее время я делаю переход с Android на iOS, лучше сказал Java на Swift, я получил общий ответ в JSON, но я не могу использовать его как объект и показать его в раскадровке.Я действительно новичок в Swift, поэтому я застрял на некоторое время.
Я пробовал ObjectMapper, а также декодирование JSON без результата вообще.
Я объявил этот ответ, как яиспользуется в Java (Android)
class ResponseObjectMapper<T,R>: Mappable where T: Mappable,R:Mappable{
var data:T?
var message:String!
var error:R?
required init?(_ map: Map) {
self.mapping(map: map)
}
func mapping(map: Map) {
data <- map["data"]
message <- map["message"]
error <- map["error"]
}
}
class UserMapper :Mappable{
var email:String?
var fullName:String?
var id:CLong?
var phoneNumber:String?
var token:CLong?
required init?(_ map: Map) {
}
func mapping(map: Map) {
email <- map["email"]
fullName <- map["fullName"]
id <- map["id"]
phoneNumber <- map["phoneNumber"]
token <- map["token"]
phoneNumber <- map["phoneNumber"]
}
}
В моем проекте Android я использую зависимость Gson и смог использовать JSON в качестве объекта
class ErrorMapper:Mappable{
var message:String?
var code:Int?
required init?(_ map: Map) {
}
func mapping(map: Map) {
message <- map["message"]
code <- map["code"]
}
}
Это Alamofire , который дал мне JSON.
func login(params: [String:Any]){Alamofire.request
("http://192.168.0.192:8081/SpringBoot/user/login", method: .post,
parameters: params,encoding: JSONEncoding.default, headers:
headers).responseJSON {
response in
switch response.result {
case .success:
let response = Mapper<ResponseObjectMapper<UserMapper,ErrorMapper>>.map(JSONString: response.data)
break
case .failure(let error):
print(error)
}
}
}
Если я распечатываю ответ с печатью (ответ), я получаю
SUCCESS: {
data = {
email = "vpozo@montran.com";
fullName = "Victor Pozo";
id = 6;
phoneNumber = 099963212;
token = 6;
};
error = "<null>";
message = SUCCESS;
}
, и если я использую этот код, я могу получить результат с ключом и значением, но я не получаюзнаю, как использовать его в качестве объекта
if let result = response.result.value {
let responseDict = result as! [String : Any]
print(responseDict["data"])
}
консоль:
Optional({
email = "vpozo@gmail.com";
fullName = "Victor Pozo";
id = 6;
phoneNumber = 099963212;
token = 6;
})
Я хотел бы использовать его в объекте, например user.token
в контроллере вида, вероятно, я 'Я действительно запутался, пытаясь сопоставить с общими атрибутами.
Type 'ResponseObjectMapper<UserMapper, ErrorMapper>' does not conform to protocol 'BaseMappable'