元组类型 '(AVAsset?,[ AnyHashable : Any]?)' 的值没有成员 'url'
value of tuple type '(AVAsset?,[ AnyHashable : Any]?)' has no member 'url'
我正在学习 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...!")
}
})
}
错误如上图
不同的尝试
avAsset
是一个元组,您必须使用索引 0
访问 AVAsset
对象。此外,由于它是可选的,您可以使用 flatMap 有选择地将其操作为 videoData
.
for (i, dkAsset) in assets.enumerated() {
dkAsset.fetchAVAssetWithCompleteBlock { avAsset in
if let data = (avAsset as? AVURLAsset).flatMap({
NSData(contentsOf: [=10=].url)
}) {
if data.write(
to: URL(
fileURLWithPath: NSTemporaryDirectory() + "tmpMovie\(i).MOV"
),
atomically: true
) {
print("success")
} else {
print("write failure")
}
} else {
print("cast/read failure")
}
}
}
我正在学习 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...!")
}
})
}
错误如上图
不同的尝试
avAsset
是一个元组,您必须使用索引 0
访问 AVAsset
对象。此外,由于它是可选的,您可以使用 flatMap 有选择地将其操作为 videoData
.
for (i, dkAsset) in assets.enumerated() {
dkAsset.fetchAVAssetWithCompleteBlock { avAsset in
if let data = (avAsset as? AVURLAsset).flatMap({
NSData(contentsOf: [=10=].url)
}) {
if data.write(
to: URL(
fileURLWithPath: NSTemporaryDirectory() + "tmpMovie\(i).MOV"
),
atomically: true
) {
print("success")
} else {
print("write failure")
}
} else {
print("cast/read failure")
}
}
}