【问题标题】:Cannot convert value of type '(AFMultipartFormData?) -> Void' to expected argument type '[String : String]?'无法将类型“(AFMultipartFormData?)-> Void”的值转换为预期的参数类型“[String : String]?”
【发布时间】:2021-03-13 10:47:00
【问题描述】:

在我的 iOS Swift 项目中,我正在尝试使用 AFNetworking 上传图片,但我收到了如下所示的编译时错误。

Cannot convert value of type '(AFMultipartFormData?) -> Void' to expected argument type '[String : String]?'

我使用的版本: pod 'AFNetworking', '~> 4.0'斯威夫特 5.0

我的代码是

func postImageToServer(url: String, parameters: NSDictionary!, video: Data,mimeType:String,fileName:String,name:String,completionHandler:@escaping (URLSessionDataTask, NSDictionary?, Error?)->()) ->() {
    manager.post(url as String, parameters: parameters, headers: { (formData: AFMultipartFormData!) in
             formData.appendPart(withFileData: video, name: name, fileName: fileName, mimeType: mimeType)
     }, progress: { (progress: Progress) in
          print("Downloading... progress1: \(String(describing: progress.fractionCompleted))")
     }, success: { (operation, responseObject) in

            print("Response: \(responseObject!)")
            completionHandler(operation,responseObject as? NSDictionary, Error?.self as? Error)

        }) { (operation, error) in

            print("Error: " + error.localizedDescription)
            completionHandler(operation!, nil ,error)
        }
}

这是我的错误图片

我也尝试了所有的研究和解决方案来解决它,但我仍然无法修复它。

我认为这是一个语法错误,因为在旧版本中我曾经运行良好,但是当我更新 AFNetworking 时,我收到了这个错误

这里有人已经解决或可以做到。

【问题讨论】:

  • 名为'video'的变量的类型是什么?
  • 是 var videoData : Data = Data()
  • 错误是否表明您应该在字典中包含Data 对象?
  • 这个错误不是运行时这是一个编译时错误,所以我认为不会有数据类型的问题。
  • 我认为这里只需要对代码块进行一些改进

标签: ios swift networking afnetworking swift5


【解决方案1】:

终于找到了在Swift 5

中使用'AFNetworking', '~> 4.0'的解决方案

在最新版本的Swift 5中,方法如下

func postImageToServer(url: String, parameters: NSDictionary!, video: Data,mimeType:String,fileName:String,name:String,completionHandler:@escaping (URLSessionDataTask, NSDictionary?, Error?)->()) ->() {

    var request: NSMutableURLRequest? = nil
    var writeError : NSError?
        
    do {
        request = try AFHTTPRequestSerializer().multipartFormRequest(withMethod: "POST", urlString: url, parameters: parameters as? [String : Any], constructingBodyWith: { formData in
            do {
                try formData.appendPart(withFileData: video, name: name, fileName: fileName, mimeType: mimeType)
            } catch {
            }
         
        }, error: &writeError)
    } catch {
    }

    let manager = AFURLSessionManager(sessionConfiguration: URLSessionConfiguration.default)

    var uploadTask: URLSessionUploadTask?
    uploadTask = manager.uploadTask(
        withStreamedRequest: request! as URLRequest,
        progress: { uploadProgress in
            print(uploadProgress.fractionCompleted)
//            DispatchQueue.main.async(execute: {
//                progressView.progress = uploadProgress.fractionCompleted
//            })
            print("Downloading... progress1: \(String(describing: uploadProgress.fractionCompleted))")
        }, completionHandler: { response, responseObject, error in
            if error != nil {
                completionHandler(uploadTask!, nil ,error)
            } else {
               completionHandler(uploadTask!,responseObject as? NSDictionary, Error?.self as? Error)
            }
        })
        uploadTask?.resume()
}

【讨论】:

    猜你喜欢
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    • 2020-12-30
    • 1970-01-01
    • 2015-12-24
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    相关资源
    最近更新 更多