swift - 无法将“URL”类型的值转换为预期的参数类型“字符串”
问题描述
我对 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)
}
解决方案
只需使用 data 方法write(to: URL)
而不是write(foFile: String)
或传递URL
path 属性。顺便说一句,命名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)
}
}
推荐阅读
- c# - 如何为幸运抽奖轮添加随机调度程序计时器(C#,XAML)
- asp.net-mvc - Asp .Net MVC,如何将值放入/包含到 DropDownListFor?
- javascript - 覆盖自定义迭代器的下一个方法
- python - Azure Detect faces API,如何将URL图片更改为本地图片?
- php - 如何用 Xpath 解析 body 类?
- python - 如何用python制作一个列表的XML?
- android - 为什么我可以在 Kotlin 中访问伴随对象之外的私人乐趣?
- python - 为什么我循环遍历方阵时会发生变化?
- python - Keras:分类与连续输入到 LSTM
- rabbitmq - Spring - 兔子模板 - 批量操作