/ / стойност на tuple type '(AVAsset?, [AnyHashable: Any]?)' няма член 'url' - swift2, swift3, миграция

стойността на типа на псевдона "(AVAsset?, [AnyHashable: Any]?)" няма "url" на член - swift2, swift3, migration

Уча Swift3, докато работя върху мигриращия кодот swift 2.2 до swift 3. Сега оставам с една грешка и няколко предупреждения. Имам нужда от помощ за грешката. Опитвате се да получите достъп до URL адреса във вид на AVAsset. Всяка помощ или урок, който мога да получа от това, ще бъдат много оценявани.

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...!")
}
})
}

въведете описанието на изображението тук

Грешката е показана на картинката по-горе

въведете описанието на изображението тук

различен опит

Отговори:

1 за отговор № 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")
}
}
}