2017-02-01 2 views
0

Я использую swift и cloudkit, пытаясь получить изображения из облачного сервера, как показано ниже, и я получаю сообщение об ошибке: «Инициализатор условной привязки должен иметь необязательный тип, а не CKAsset» в строке: if let ckAsset = image { , пожалуйста, помогите, поскольку я новой для быстрой и это мое первое приложениеБыстрое получение инициализатора условной привязки должно иметь необязательный тип, почему?

let ckRecord = Saveddata[indexPath.row] 
    weak var weakCell = cell 
    backgroundQueue.addOperation { 
     let image = ckRecord.object(forKey: "Photos") as! CKAsset 

     if let ckAsset = image { 
      if let URL = ckAsset.fileURL { 
      let imagedata = NSData(contentsOf: URL) 
      OperationQueue.main.addOperation() { 
       cell.imageView?.image = UIImage(data: imagedata! as Data) 
       } 

     } 

     } 
+0

всякий раз, когда вы используете 'if let', правая рука' = 'должна быть * необязательной *. Однако «образ» НЕ является и необязательным. Потому что: в строке перед тем, как вы принудительно развернули изображение, используя 'as! CKAsset' – Honey

+0

поэтому HOw я могу выполнить ту же логику с форсированием изображения как CKAsset – rania

+0

Если вы получите эту ошибку: не используйте 'if let'. Просто используйте 'let'. Хотя лучше использовать' guard' вместо всего принудительного разворачивания – Honey

ответ

1

Я думаю, что вы ищете это:

let ckRecord = Saveddata[indexPath.row] 
weak var weakCell = cell 
backgroundQueue.addOperation { 
    let image = ckRecord.object(forKey: "Photos") 

    // Conditionally cast image resource 
    if let ckAsset = image as? CKAsset { 
     // This isn't optional, no protection needed 
     let url = ckAsset.fileURL 

     // Data(contentsOf:...) will throw on failure 
     do { 
      // Fetch the image data (try because it can fail and will throw if it does) 
      let imagedata = try Data(contentsOf: url) 
      OperationQueue.main.addOperation() { 
       weakCell?.imageView?.image = UIImage(data: imagedata) 
      } 
     } 
     catch { 
      // handle data fetch error 
     } 
    } 
} 

это условно отбрасывает ресурс как CKAsset и только продолжается, если это на самом деле один ,

+0

@rania, или, возможно, вы имели в виду это, что также делает общий смысл – Honey

+1

Возможно, это правда, есть достаточное количество недостающих/неопределенных, что я только что зафиксировал очевидную проблему, о которой он жаловался. –

+1

@david Berry Я верю, да, но теперь у меня такая же ошибка во второй строке: если пусть URL = ckAsset.fileURL {должен Ic повешен: если пусть URL = ckAsset.fileURL как? URL { – rania

Смежные вопросы

 Смежные вопросы