无法将“URL”类型的值转换为预期的参数类型“String”

问题描述 投票:0回答:1

我对Swift相当新,我想在录制后将视频保存到文档文件夹(所以我可以上传到服务器)但是我收到了上述错误。我理解错误是什么,但我不知道如何解决它。我在Stack上的另一个答案中得到了以下代码。我错过了什么?

构建在此行上失败:

videoData?.write(toFile: dataPath, atomically: false)

完整的功能是:

func getDocumentsDirectory() -> URL {
    let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
    let documentsDirectory = paths[0]
    return documentsDirectory
}

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

    let videoURL = info[UIImagePickerController.InfoKey.mediaURL] as! NSURL
    let videoData = NSData(contentsOf: videoURL as URL)
    let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
    let docsDirectory = getDocumentsDirectory()
    let dataPath = docsDirectory.appendingPathComponent("/videoFileName.mp4")

    videoData?.write(toFile: dataPath, atomically: false)

    self.dismiss(animated: true, completion: nil)

}
swift xcode video
1个回答
0
投票

只需使用数据方法write(to: URL)而不是write(foFile: String)或传递URL路径属性。顺便说一下命名URL dataPath会产生误导。将其更改为fileURL并传递其路径fileURL.path但最好尽可能使用URL方法对应物。另外正如@vadian的评论中已经提到的那样,没有必要强制转换为NSURL并返回URL,并且在附加路径组件时不要传递前导斜杠。这同样适用于NSData,你应该尽可能删除NS前缀。 Swift原生类型是Data

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]){
    if let videoURL = info[.mediaURL] as? URL {
        do {
            let videoData = try Data(contentsOf: videoURL)
            let fileURL = documentsDirectory.appendingPathComponent("videoFileName.mp4")
            try videoData.write(to: fileURL)
            // pass atomic options if you would like to automatically override any existing file if needed
            // try videoData.write(to: fileURL, options: .atomic)
        } catch {
            print(error)
        }
        dismiss(animated: true)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.