2017-02-01 4 views
0

아래와 같이 cloudserver에서 이미지를 가져 오려고하는 swift 및 cloudkit을 사용하고 있습니다. "조건부 바인딩의 초기화 프로그램에 선택 유형이 CKAsset이 아니어야합니다"라는 줄이 있습니다. if ckAsset = image { 도와주세요.조건부 바인딩의 초기화에 오류가 발생하는 경우 선택적 유형이 있어야하며, 이유는 무엇입니까?

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으로 자원을 캐스팅 만 실제로 한 경우 진행 : 신속 새로운 이것은 내 첫 번째 응용 프로그램

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'을 사용할 때마다'='의 오른손은 * 선택적 *이어야합니다. 그러나 '이미지'는 선택 사항이 아닙니다. 왜냐하면 : 이전에 당신이 강제로 unwrapped 이미지를'as! CKAsset' – Honey

+0

그래서 HOw는 강제로 이미지를 강제로 같은 논리를 실행할 수 있습니다 CKAsset – rania

+0

만약 당신이 그 오류가 발생하면 : '만약 let'을 사용하지 마십시오. 그냥'let'을 사용하십시오. 강제 감싸기 대신'guard '를 사용하는 것이 가장 좋습니다. – Honey

답변

1

입니다 내가 당신을 위해 무엇을 찾고있는 것은이 생각 .

+0

@rania 또는 아마도 당신은 이것도 합리적이다. – Honey

+1

아마도 사실, 그가 누명을 씌우는 분명한 문제를 방금 해결했기 때문에 누락되거나 정의되지 않은 충분한 내용이있다. –

+1

@ david Berry 예 -하지만 이제 두 번째 줄에 동일한 오류가 있습니다. let URL = ckAsset.fileURL {Ic 교수형 : if URL = ckAsset.fileURL 같이? URL { – rania