首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AFNetwoking与Web3.0和xcode 8: POST请求和GET请求

AFNetwoking与Web3.0和xcode 8: POST请求和GET请求
EN

Stack Overflow用户
提问于 2016-09-22 13:10:25
回答 3查看 2.3K关注 0票数 1

我正在尝试使用AFNetworking &Swid3.0和xcode 8.0来解析数据,但是我得到了错误,就像below.below代码对于Swid2.3很好,但在3.0中不起作用一样

或者如果有人知道AFNetworking和Web3.0,使用xcode 8.0作为POST和GET请求,请告诉我。简单的例子。提前感谢

您可以在下面看到错误。

代码语言:javascript
复制
 func callApi(apiName: String, param: [String : AnyObject]?, data: NSDictionary?, withMethod type: String, CompletionHandler:@escaping (_ code: Int, _ error:NSError?, _ response:AnyObject?) -> Void)

    {

        MBProgressHUD.showAdded(to: AppDelegateObj.window, animated: true)
        let str_URL : String = kHOSTPATH+apiName

        let manager: AFHTTPSessionManager = AFHTTPSessionManager()

        if (type == kREQ_POST) {

            manager.POST(str_URL, parameters: param, constructingBodyWithBlock: { (formData: AFMultipartFormData!) in

                if data?.allValues.count != 0 && data != nil
                {

                    let fileUrl = NSURL(fileURLWithPath: (data?.valueForKey("filePath"))! as! String)
                    try! formData.appendPartWithFileURL(fileUrl, name: (data?.valueForKey("key"))! as! String)
                }

                }, progress: { (NSProgress) in

                }, success: { (task:URLSessionDataTask, responseObject) -> Void in

                    CompletionHandler(code: 1, error: nil, response:responseObject)
                    MBProgressHUD.hideHUDForView(AppDelegateObj.window, animated: true)

                }, failure: { (task:URLSessionDataTask?, error:NSError) -> Void in

                    CompletionHandler(code: 0, error: error, response:nil)
                    MBProgressHUD.hideHUDForView(AppDelegateObj.window, animated: true)
            })
        }
        else {

            manager.GET(str_URL, parameters: param, progress: { (NSProgress) in

                }, success: { (task:URLSessionDataTask, responseObject) -> Void  in

                    CompletionHandler(code: 1, error: nil, response:responseObject)
                    MBProgressHUD.hideHUDForView(AppDelegateObj.window, animated: true)

                }, failure: { (task:URLSessionDataTask?, error:NSError) -> Void  in

                    CompletionHandler(code: 0, error: error, response:nil)
                    MBProgressHUD.hideHUDForView(AppDelegateObj.window, animated: true)
            })
        }
    }

但我会犯这样的错误

代码语言:javascript
复制
cannot convert the value of type (URLSessionDataTask?,NSError)->Void to expected argument type '((URLSessionDataTask?,NSError)->Void)?'
EN

回答 3

Stack Overflow用户

发布于 2016-10-05 23:58:50

将错误类型从NSERROR更改为ERROR。类型兼容性从Swift2.3改为SWIFT3.0

票数 1
EN

Stack Overflow用户

发布于 2017-04-19 06:52:27

试试这个:

代码语言:javascript
复制
func Get()
{
    let url = NSURL(string: Webserive.UserProfileInfoList + "/" + String(300))
    let request = NSURLRequest(url: url! as URL)

    NSURLConnection.sendAsynchronousRequest(request as URLRequest, queue: OperationQueue.main) {(response, data, error) in
        self.GetData(data: data! as NSData)
    }
}

func GetData(data:NSData){

    let dict: NSDictionary!=(try! JSONSerialization.jsonObject(with: data as Data, options: JSONSerialization.ReadingOptions.mutableContainers)) as! NSDictionary
    print(dict)
    self.PostData()
}

func PostData(){

    let parameters : NSMutableDictionary? = [

        "UserID": String(300),
        "UserProfileID": String(356)]

        let manager = AFHTTPSessionManager()

        let serializerRequest = AFJSONRequestSerializer()
        serializerRequest.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
        manager.requestSerializer = serializerRequest

        let serializerResponse = AFJSONResponseSerializer()
        serializerResponse.readingOptions = JSONSerialization.ReadingOptions.allowFragments
        serializerResponse.acceptableContentTypes = ((((NSSet(object: "application/json") as! Set<String>) as Set<String>) as Set<String>) as Set<String>) as Set<String>;
        manager.responseSerializer = serializerResponse
        manager.post(Webserive.DefaultProfile, parameters: parameters, progress: nil, success: { (task: URLSessionDataTask, responseObject: Any?) in
        if (responseObject as? [String: AnyObject]) != nil {

             print("responseObject \(responseObject)")
        }
    }) { (task: URLSessionDataTask?, error: Error) in
        print("POST fails with error \(error)")
    }
}
票数 0
EN

Stack Overflow用户

发布于 2017-04-21 15:54:26

我也有过类似的问题。不知道问题的根源是什么,但是您可以通过不指定某些参数的类型来帮助自己,在这种情况下,POST方法调用中的“error”:

代码语言:javascript
复制
manager.post("http://...", parameters: [:], progress: nil, success: { (operation: URLSessionDataTask, responseObject: Any?) in
    print("Success")
}, failure: { (operation: URLSessionDataTask?, error) in
    let error = error as? Error
    print("Failure, error is \(error?.description)")
})

使用这种代码模式,我可以使用Xcode 8.3和Swift 3构建代码。

编辑:

如果您对“无法转换类型的值.”有问题,请检查函数所需的类型。

我的问题是,我已经声明了错误,因为CoreData 1和AFNetworking肯定不会返回该错误类型。

代码语言:javascript
复制
class Error: NSManagedObject {
// Insert code here to add functionality to your managed object subclass
}

我需要改变的是:

代码语言:javascript
复制
(operation: URLSessionDataTask?, error: Error?)

至:

代码语言:javascript
复制
(operation: URLSessionDataTask?, error: Swift.Error?)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39640029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档