Ios 无法使用Alamofire 4.0中类型为“(String,withName:String)”的参数列表调用“append”

Ios 无法使用Alamofire 4.0中类型为“(String,withName:String)”的参数列表调用“append”,ios,swift,swift3,alamofire,Ios,Swift,Swift3,Alamofire,我使用Alamofire 4.0在通过设备/摄像机选择或录制视频后将其上载到服务器,但当我尝试使用append调用上载函数时,我在all append语句中出现了此错误,我的代码中有什么错误 第二个问题是我是否想在上传过程中显示进度和进度百分比,我如何通过Alamofire实现这一点 谢谢: 读取选定/录制视频的url后的我的代码 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMedi

我使用Alamofire 4.0在通过设备/摄像机选择或录制视频后将其上载到服务器,但当我尝试使用append调用上载函数时,我在all append语句中出现了此错误,我的代码中有什么错误

第二个问题是我是否想在上传过程中显示进度和进度百分比,我如何通过Alamofire实现这一点

谢谢:

读取选定/录制视频的url后的我的代码

 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {


    let mediaType:AnyObject? = info[UIImagePickerControllerMediaType] as AnyObject?

    if let type:AnyObject = mediaType {
        if type is String {
            let stringType = type as! String
            if stringType == kUTTypeMovie as String {
                let urlOfVideo = info[UIImagePickerControllerMediaURL] as? NSURL
                if let url = urlOfVideo {
                    // 2

                    print(url)

                    let URL = try! URLRequest(url: "myurl", method: .post, headers: ["Authorization": "auth_token"])


                    Alamofire.upload(multipartFormData: { multipartFormData in

                        multipartFormData.append(url, withName: "videoFile", fileName: "filename", mimeType: "mov")
                        multipartFormData.append("video", withName: "load")
                        multipartFormData.append("record", withName: "type")

                    }, with: URL, encodingCompletion: { (result) in
                        // code
                    })


                }
            } 
        }
    }
    picker.dismiss(animated: true, completion: nil)

}

关于错误消息:

无法使用“String,withName:String”类型的参数列表调用“append”

如果我们看一下Alamofire的MultipartFormData的append方法:

我们注意到没有附加。。。方法允许使用字符串类型的第一个参数,但是,当在Alamofire.upload的multipartFormData闭包中追加时,尝试使用该参数

我相信您正在尝试使用以下方法:

在这种情况下,您需要将字符串编码到Swift类型数据中,例如:

multipartFormData.append("video".data(using: .utf8)!, withName: "load")
multipartFormData.append("record".data(using: .utf8)!, withName: "type") 
至于你的电话:

上面的不可变url的类型为NSURL。在SWIFT 3中,您应该更喜欢使用基础类型URL,而不是NSURL,但不是同一类型。我们在Alamofire 4中看到,它特别希望您尝试调用上面的append函数的URL类型:

您已经注意到,您可以通过在实例url上使用NSURL的absoluteURL属性来使用变通方法调用此方法;但这只会产生一个可选的URL类型。更好的方法是从一开始就使用URL类型而不是NSURL。

我们可以这样做

    static func requestMultiPartFromData(image: UIImage, fileName: String){
        let url = "Your URL HERE"
        Alamofire.upload(
            multipartFormData: { multipartFormData in
                guard let image = image.toString() else { return }
                multipartFormData.append(image.data(using: .utf8)!, withName: fileName)
        },
            to: url,
            encodingCompletion: { encodingResult in
                switch encodingResult {
                case .success(let upload, _, _):
                    upload.responseJSON { response in
                        debugPrint(response)
                    }
                case .failure(let encodingError):
                    print(encodingError)
                }
        }
        )
    }
}
延长

extension UIImage {
    func toString() -> String? {
        let data: Data? = UIImage.pngData(self)()
        return data?.base64EncodedString(options: .endLineWithLineFeed)
    }
}

它解决了我的问题,但第一行是获取视频的URL,它给出了此错误,无法使用类型为“NSURL,with name:String,fileName:String,mimeType:String”的参数列表调用“append”,我通过键入.absoluteURL到URL multipartFormData.appendurl.absoluteURL!,withName:videoFile,fileName:fileName,mimeType:mov。在这种情况下,我如何在上传视频时制作进度条?@Samahamed url的类型为NSURL。在SWIFT 3中,我们可以使用基础类型URL而不是NSURL前桥,但不是同一类型,我们在ALAMOFRAE 4中看到它特别希望前一种类型,例如FUNC AppDeNo.FrimeLL:URL,No.NoD:String,文件名:String,MimeType:String。NSURL的absoluteURL属性实际上是URL类型的可选属性。更好的方法是从一开始就使用URL而不是NSURL。@Samahamed至于进度条:我认为这超出了问题的范围,最好将问题限制在一个特定的主题上,这样会增加有人回答问题的机会,以及让未来的读者能够找到问答。现在您已经解决了multipartFormData的语法错误,我认为您应该创建一个新问题,专门讨论如何跟踪进度,但是从跟踪进度到实际实现进度条的步骤也相当大,我怀疑回答者希望看到您自己的尝试。是的,我现在就这样做:
multipartFormData.append(url, withName: "videoFile", fileName: "filename", mimeType: "mov")
public func append(_ fileURL: URL, withName name: String, fileName: String, mimeType: String)
    static func requestMultiPartFromData(image: UIImage, fileName: String){
        let url = "Your URL HERE"
        Alamofire.upload(
            multipartFormData: { multipartFormData in
                guard let image = image.toString() else { return }
                multipartFormData.append(image.data(using: .utf8)!, withName: fileName)
        },
            to: url,
            encodingCompletion: { encodingResult in
                switch encodingResult {
                case .success(let upload, _, _):
                    upload.responseJSON { response in
                        debugPrint(response)
                    }
                case .failure(let encodingError):
                    print(encodingError)
                }
        }
        )
    }
}
extension UIImage {
    func toString() -> String? {
        let data: Data? = UIImage.pngData(self)()
        return data?.base64EncodedString(options: .endLineWithLineFeed)
    }
}