2016-08-21 2 views
2

제 클라우드 키트 메소드에 대한 일반적인 "결과"콜백을 작성하고 있지만 "성공"콜백을 해석 할 수없는 이유가 확실하지 않습니다.Swift 3 일반 표현식을 평가할 때 컴파일 오류가 발생합니다.

참조 : https://github.com/apple/swift-evolution/blob/master/proposals/0048-generic-typealias.md

import Foundation 
import CloudKit 

public enum CloudKitError: Error { 
    case general(String) 
} 

public enum CloudKitResult<T, ResultError: Error> { 
    case success(T) 
    case failure(ResultError) 
} 

public typealias CloudKitFetchClosure<T> = (_ result: CloudKitResult<T, CloudKitError>) -> Void 

public final class CloudKitController { 

    public typealias T = CKRecord 

     public func save(_ record: CKRecord, callback: CloudKitFetchClosure<T>) -> Void { 

     self.publicDB.save(record, completionHandler: {updatedRecord, error in 

      if let _: Error = error { 

       DispatchQueue.main.async(execute: { 
        callback(.failure(.general("Something went wrong"))) 
       }) 

      } else { 

       DispatchQueue.main.async(execute: { 
        callback(.success(updatedRecord)) 
       }) 
      } 
     }) 
    } 
} 


member 'success' in 'CloudKitResult<T, CloudKitError>' (aka 'CloudKitResult<CKRecord, CloudKitError>') produces result of type 'CloudKitResult<T, ResultError>', but context expects 'CloudKitResult<T, CloudKitError>' (aka 'CloudKitResult<CKRecord, CloudKitError>') 
       callback(.success(updatedRecord)) 
+0

두 번째 링크는 첫 번째 링크와 같습니다. 또한 코드에 링크하지 말고 질문의 일부로 게시하십시오. – UnholySheep

답변

1

나는 CloudKit에서 반환 된 기록 랩을 해제했다. 컴파일러는 이제 만족합니다.

public func save(_ record: CKRecord, callback: CloudKitFetchClosure<T>) -> Void { 

    self.publicDB.save(record, completionHandler: {updatedRecord, error in 

     if let _: Error = error { 

      DispatchQueue.main.async(execute: { 
       callback(.failure(.general("Something went wrong"))) 
      }) 

     } else { 

      if let ckrecord: CKRecord = updatedRecord { 

       DispatchQueue.main.async(execute: { 
        callback(.success(ckrecord)) 
       }) 
      } 
     } 
    }) 
} 
관련 문제