Alf*_*nso 14 iphone ios swift alamofire
我正在使用Alamofire库来连接iOs中的API.我在其中一个连接中遇到问题,我不知道是否是因为正文中编码的数据或任何其他东西.为了检测我的错误,我试图在控制台中打印请求体,以检查我是否正在发送正确的数据结构.
我的代码如下:
func updateUser (#user: User, completionHandler: (responseObject: User?, error: AnyObject?) -> ()) {
let parameters = [
"_id": "\(user._id!)",
"email": "\(user.email!)",
"media": "\(Mapper().toJSONArray(user.media!))",
"blogs": "\(Mapper().toJSONArray(user.blogs!))"
]
var manager = Alamofire.Manager.sharedInstance
manager.request(.PUT, apiUrl + "/route/to/api", parameters: parameters, encoding: .JSON)
.responseObject{ (req: NSURLRequest, res: NSHTTPURLResponse?, user: User?, data: AnyObject?, error: NSError?) in
if(error != nil) {
NSLog("Error API updateUser: \(error)")
}
else {
completionHandler(responseObject: user as User?, error: data)
}
}
}
Run Code Online (Sandbox Code Playgroud)
User是一个Mappable对象,因为我使用的是ObjectMapper和Alamofire.用户由以下代码定义:
class User: Mappable {
var _id: String?
var name: String?
var media: [Media]?
init(_id: String, name: String, media: [Media]){
self._id = _id;
self.name = name;
self.media = media
}
required init=(_ map: Map){
mapping(map)
}
func mapping(map: Map){
_id <- map["_id"]
name <- map["name"]
media <- map["media"]
}
}
Run Code Online (Sandbox Code Playgroud)
媒体定义为用户,但具有不同的变量.
另外,我想知道,除了打印请求体外,我是否可以以更有效的方式将参数包含在Alimofire请求中(比如解析User对象并将其替换为参数变量)
关于我的问题的任何想法?
编辑:
根据@Travis的建议,最后我找到了打印请求体的解决方案.您可以在下面找到代码:
println("request body: \(NSString(data:req.HTTPBody!, encoding:NSUTF8StringEncoding) as String?)")
Run Code Online (Sandbox Code Playgroud)
关于作为参数传递一个对象我无法工作,我按照官方文档,但我可以做到.
Das*_*oga 39
适用于Swift 3+
print(NSString(data: (response.request?.httpBody)!, encoding: String.Encoding.utf8.rawValue))
Run Code Online (Sandbox Code Playgroud)
你的第一个问题的答案是,
println("request body: \(request.HTTPBody)")
Run Code Online (Sandbox Code Playgroud)
至于你的第二个问题,在Alamofire主页上有关于API参数抽象以及CRUD和授权的整个部分.
为用于打印日志的Request类添加了以下扩展名。
extension Request {
public func debugLog() -> Self {
#if DEBUG
debugPrint("=======================================")
debugPrint(self)
debugPrint("=======================================")
#endif
return self
}
}
Run Code Online (Sandbox Code Playgroud)
要使用扩展,只需在定义您的请求后使用debugLog()即可,如下所示:
Alamofire.request(url).debugLog()
.responseJSON( completionHandler: { response in
})
Run Code Online (Sandbox Code Playgroud)
参考网址:链接
| 归档时间: |
|
| 查看次数: |
17852 次 |
| 最近记录: |