2017-01-13 11 views
0

Я изучаю Swift3, когда работаю над переносом кода из swift 2.2 в swift 3. Я сейчас застрял на одном ошибка и пару предупреждений. Мне нужна помощь в ошибке. Пытается получить доступ к значению url в AVAset типа. Любая помощь или урок, который я могу получить от этого, будут очень признательны.значение типа tuple '(AVAsset?, [AnyHashable: Any]?)' Не имеет члена '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...!") 
    } 
    }) 
} 

enter image description here

ошибка показана на рисунке выше

enter image description here

другая попытка

+1

'avAsset.0.url' – luk2302

+0

Да, avAsset является кортеж, содержащий AVAsset и словарь – Callam

+0

@ luk2302, которая не работала, подобная ошибка выскочит«значение типа кортежа 'AVAsset? не имеет имени пользователя 'url' ' –

ответ

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") 
     } 
    } 
} 
+0

Я получаю ту же ошибку. Я отправлю снимок экрана –

+0

Вы можете наложить AVAsset на AVURLAsset, я обновил свой ответ – Callam

+0

Спасибо, это работает –