【发布时间】:2019-05-29 19:55:20
【问题描述】:
我目前正在从 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"]
}
}
这是给我 JSON 的 Alamofire。
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)
}
}
}
如果我用 print(response) 打印响应,我得到了
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;
})
我想在 Object 中使用它,例如在 View Controller 中使用 user.token,可能我真的很困惑,尝试使用通用属性进行映射。
Type 'ResponseObjectMapper<UserMapper, ErrorMapper>' does not conform to protocol 'BaseMappable'
【问题讨论】:
-
嗨 Victor... 请查看 SwiftyJSON 库以了解 swift。它可以帮助您直接将 JSON 响应作为对象获取。这是链接 => github.com/SwiftyJSON/SwiftyJSON
-
嗨@CedanMisquith,我一直在尝试一些在cocoapods 中的依赖项,安装了Swifty,但我不知道如何使用数据键和值,然后将其解析为对象。我会再试一次谢谢。
-
我绝对可以帮助您编写代码。这很简单,我将以您的 JSON 为例并发布答案。
标签: swift4 alamofire objectmapper