我正在学习Swift3,因为我正致力于将代码从swift 2.2迁移到swift 3.我现在陷入了一个错误和几个警告。我需要帮助解决错误。尝试访问AVAsset类型中的url值。我将非常感谢您从中获得的任何帮助或教训。
for index in 0...(assets.count - 1){
assets[index].fetchAVAssetWithCompleteBlock({ (avAsset) -> Void in
if let fileURL = avAsset.url{
let videoData = NSData(contentsOf: fileURL as URL)
// optionally, write the video to the temp directory
let videoPath = NSTemporaryDirectory() + "tmpMovie\(index).MOV"
let videoURL = NSURL(fileURLWithPath: videoPath)
let writeResult = videoData?.write(to: videoURL as URL, atomically: true)
if let writeResult = writeResult, writeResult {
print("success")
}
else {
print("failure")
}
self.arrSelectedGalleryMedia.add(videoURL)
if self.arrSelectedGalleryMedia.count >= assets.count{
self.UploadVideo()
}
}
else {
print("error...!")
}
})
}
错误如上图所示
不同的尝试
答案 0 :(得分:1)
avAsset
是一个元组,您必须使用AVAsset
索引访问0
对象。此外,由于它是可选的,您可以使用flatMap选择性地将其操作为videoData
。
for (i, dkAsset) in assets.enumerated() {
dkAsset.fetchAVAssetWithCompleteBlock { avAsset in
if let data = (avAsset as? AVURLAsset).flatMap({
NSData(contentsOf: $0.url)
}) {
if data.write(
to: URL(
fileURLWithPath: NSTemporaryDirectory() + "tmpMovie\(i).MOV"
),
atomically: true
) {
print("success")
} else {
print("write failure")
}
} else {
print("cast/read failure")
}
}
}