我的目的是通过Alamofire执行REST发布请求。
我有一个对象:
struct Dog: Codable {
var name: String
var owner: String
}
我用这个:
let JSONString = user.toJSONString(prettyPrint: true) //ObjectMapper call
返回:
{
"name" : "Jon",
"owner" : "Jon Doe"
}
但我想要一个[String: Any]
结构,适合像alamofire请求:
[
"name" : "Jon",
"owner" : "Jon Doe"
]
怎么做?
答案 0 :(得分:0)
一种解决方案是在结构中添加一个属性以返回字典表示,复杂的
var dictionaryRepresentation : [String : String] {
return try! JSONSerialization.jsonObject(with: try! JSONEncoder().encode(self)) as! [String : String]
}
或非常简单
var dictionaryRepresentation : [String : String] {
return ["name" : name, "owner" : owner]
}
注意:
基本上永远不会将 prettyPrinted 字符串发送到服务器。它并不关心漂亮。
答案 1 :(得分:0)
您的Dog
未正确配置为使用ObjectMapper
,缺少Mappable
协议。
struct Dog: Mappable {
var name: String?
var owner: String?
init?(map: Map) {
}
// Mappable
mutating func mapping(map: Map) {
name <- map["name"]
owner <- map["owner"]
}
}
然后您可以使用BaseMappable.toJSON
传递给Alamofire的参数,即[String: Any]
let parameters: Parameters = user.toJSON()
_ = Alamofire.request(theURL, method:.post, parameters: parameters, encoding: JSONEncoding.default).validate().responseJSON() {
// -----...
}
PS:
我的user
一定不能是Dog
? :P