Ios 如何使用alamofire post request swift 3和参数以及回调?
我正在使用此函数进行alamofire请求。请告诉我我做错了什么Ios 如何使用alamofire post request swift 3和参数以及回调?,ios,swift3,alamofire,Ios,Swift3,Alamofire,我正在使用此函数进行alamofire请求。请告诉我我做错了什么 func requestForLogin(Url:String,username: String,password: String, completion: @escaping (_ Dic: NSDictionary?,_ status:NSInteger) -> Void) { var dic=NSDictionary() let params: Parameters = [ "use
func requestForLogin(Url:String,username: String,password: String, completion: @escaping (_ Dic: NSDictionary?,_ status:NSInteger) -> Void) {
var dic=NSDictionary()
let params: Parameters = [
"user": username,
"pass": password
]
Alamofire.request(Url, method: .post, parameters: params, encoding: URLEncoding.httpBody)
.responseJSON { response in
switch response.result {
case .success:
print("Validation Successful")
dic=(response.result.value) as! NSDictionary
var error = NSInteger()
error=dic.object(forKey: "error") as! NSInteger
completion(dic,error)
case .failure(let error):
print(error)
completion(dic,0)
}
}
}
试试这个:
Alamofire.request(url, method: .post, parameters: parameter).validate().responseJSON { response in
switch response.result {
case .success:
if let result = response.result.value {
print("Validation Successful")
dic=(response.result.value) as! NSDictionary
var error = NSInteger()
error=dic.object(forKey: "error") as! NSInteger
completion(dic,error)
}
case .failure(let error):
print(error)
completion(dic,0)
}
}
试试这个:
Alamofire.request(url, method: .post, parameters: parameter).validate().responseJSON { response in
switch response.result {
case .success:
if let result = response.result.value {
print("Validation Successful")
dic=(response.result.value) as! NSDictionary
var error = NSInteger()
error=dic.object(forKey: "error") as! NSInteger
completion(dic,error)
}
case .failure(let error):
print(error)
completion(dic,0)
}
}
请检查打印请求正文。您可以使用
debugprint
方法打印请求正文您还可以使用Postman谷歌chrome插件检查此请求正文
仅供交叉核对 请尝试以下代码:-
let _request = Alamofire.request(Url, method: .post, parameters: params, encoding: URLEncoding.httpBody)
.responseJSON { response in
switch response.result {
case .success:
print("Validation Successful")
dic=(response.result.value) as! NSDictionary
var error = NSInteger()
error=dic.object(forKey: "error") as! NSInteger
completion(dic,error)
case .failure(let error):
print(error)
completion(dic,0)
}
}
debugPrint("whole _request ****",_request)
请检查打印请求正文。您可以使用
debugprint
方法打印请求正文您还可以使用Postman谷歌chrome插件检查此请求正文
仅供交叉核对 请尝试以下代码:-
let _request = Alamofire.request(Url, method: .post, parameters: params, encoding: URLEncoding.httpBody)
.responseJSON { response in
switch response.result {
case .success:
print("Validation Successful")
dic=(response.result.value) as! NSDictionary
var error = NSInteger()
error=dic.object(forKey: "error") as! NSInteger
completion(dic,error)
case .failure(let error):
print(error)
completion(dic,0)
}
}
debugPrint("whole _request ****",_request)
使用Almofire和SwiftyJSON,您可以轻松调用JSON Format
或者使用包装类,您可以轻松地调用AlmofireAPI。
或者,如果使用了SHOP API,那么下面是代码。
如果出现此错误,“由于应用程序传输安全策略要求使用安全连接,因此无法加载资源。”
您只需在info.plist文件的NSAppTransportSecurity字典中将NSAllowsArbitraryLoads密钥添加为YES
比如说,
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
AppDelegate方法
添加Alamofire视图模型类的函数
视图控制器方法
创建一个UserModel类,在其中使用JsonExport或其他工具定义模型
使用Almofire和SwiftyJSON,您可以轻松调用JSON Format
或者使用包装类,您可以轻松地调用AlmofireAPI。
或者,如果使用了SHOP API,那么下面是代码。
如果出现此错误,“由于应用程序传输安全策略要求使用安全连接,因此无法加载资源。”
您只需在info.plist文件的NSAppTransportSecurity字典中将NSAllowsArbitraryLoads密钥添加为YES
比如说,
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
AppDelegate方法
添加Alamofire视图模型类的函数
视图控制器方法
创建一个UserModel类,在该类中使用JsonExport或其他方法定义模型因为响应是JSON格式的,所以没有得到响应。您必须将JSON转换为字典类型 为此,您可以使用以下代码:
func convertToDictionary(_ string:String) -> [String: Any]? {
if let data = string.data(using: .utf8) {
do {
return try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
} catch {
print(error.localizedDescription)
}
}
return nil
}
要在代码中使用此选项,请执行以下操作:
func requestForLogin(Url:String,username: String,password: String, completion: @escaping (_ Dic: [String:Any]?,_ status:Int) -> Void) {
var dic:[String:Any]?
let params: Parameters = [
"user": username,
"pass": password
]
Alamofire.request(Url, method: .post, parameters: params, encoding: URLEncoding.httpBody)
.responseJSON { response in
switch response.result {
case .success:
print("Validation Successful")
dic = convertToDictionary(response.result.value as? String ?? "") as? [String:Any]
var error = Int()
error = dic["error"] as? Int ?? 0
completion(dic,error)
case .failure(let error):
print(error)
completion(dic,0)
}
}
}
这里我使用了
[String:Any]
而不是NSDictionary
和Int
而不是NSInteger
。此外,在这样的场景中不应使用“强制展开”。所以我也改变了这一点。您没有得到响应,因为它是JSON格式的。您必须将JSON转换为字典类型
Alamofire.request(URL + apiName, method: method, parameters: parameters).validate().responseJSON { response in
switch response.result {
case .success:
if let json: NSDictionary = response.result.value as? NSDictionary{
print(json)
}else {
completion(nil, NSError.init(domain: ErrorMessage, code: 0, userInfo: nil))
}
case .failure(let error):
print (error)
completion(nil, NSError.init(domain: ErrorMessage, code: 0, userInfo: nil))
}
为此,您可以使用以下代码:
func convertToDictionary(_ string:String) -> [String: Any]? {
if let data = string.data(using: .utf8) {
do {
return try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
} catch {
print(error.localizedDescription)
}
}
return nil
}
要在代码中使用此选项,请执行以下操作:
func requestForLogin(Url:String,username: String,password: String, completion: @escaping (_ Dic: [String:Any]?,_ status:Int) -> Void) {
var dic:[String:Any]?
let params: Parameters = [
"user": username,
"pass": password
]
Alamofire.request(Url, method: .post, parameters: params, encoding: URLEncoding.httpBody)
.responseJSON { response in
switch response.result {
case .success:
print("Validation Successful")
dic = convertToDictionary(response.result.value as? String ?? "") as? [String:Any]
var error = Int()
error = dic["error"] as? Int ?? 0
completion(dic,error)
case .failure(let error):
print(error)
completion(dic,0)
}
}
}
这里我使用了
[String:Any]
而不是NSDictionary
和Int
而不是NSInteger
。此外,在这样的场景中不应使用“强制展开”。所以我也改变了这一点。你的问题是什么?你能告诉我们吗?我没有得到响应结果是你失败了?使用本机Swift类型而不是Foundation
类型,例如Int
而不是NSInteger
和Dictionary
而不是NSDictionary
。你的问题是?你能告诉我们吗?我没有得到响应结果是你失败了?使用本机Swift类型而不是Foundation
类型,例如Int
而不是NSInteger
和Dictionary
而不是NSDictionary
。
Alamofire.request(URL + apiName, method: method, parameters: parameters).validate().responseJSON { response in
switch response.result {
case .success:
if let json: NSDictionary = response.result.value as? NSDictionary{
print(json)
}else {
completion(nil, NSError.init(domain: ErrorMessage, code: 0, userInfo: nil))
}
case .failure(let error):
print (error)
completion(nil, NSError.init(domain: ErrorMessage, code: 0, userInfo: nil))
}