Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使用alamofire post request swift 3和参数以及回调?_Ios_Swift3_Alamofire - Fatal编程技术网

Ios 如何使用alamofire post request swift 3和参数以及回调?

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

我正在使用此函数进行alamofire请求。请告诉我我做错了什么

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))
    }