2015-10-02 12 views
5

Sto cercando di implementare AlamofireObjectMapper (https://github.com/tristanhimmelman/AlamofireObjectMapper) con Alamofire 3 e l'ultima versione di ObjectMapper (https://github.com/Hearst-DD/ObjectMapper).Impossibile convertire il valore di tipo 'T?' al tipo di argomento previsto '_?' - Tipi generici e blocchi di completamento

Sembra che AlamofireObjectMapper, non sia stato aggiornato per funzionare con Alamofire 3, quindi sto provando a farlo da solo.

Sono arrivato a questo pezzo di codice e ora sono bloccato.

Sembra che il tipo generico T non sia accessibile all'interno del blocco di completamento della risposta. È una modifica di Alamofire 3 o una modifica di Swift 2.1?

Questo è l'errore:

Cannot convert value of type 'T?' to expected argument type '_?'

public func responseObject<T: Mappable>(queue: dispatch_queue_t?, keyPath: String?, completionHandler: (NSURLRequest, NSHTTPURLResponse?, T?, AnyObject?, ErrorType?) -> Void) -> Self { 
    return response(queue: queue) { (request, response, data, error) -> Void in 
     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { 
      let JSONResponseSerializer = Request.JSONResponseSerializer(options: .AllowFragments) 
      let result = JSONResponseSerializer.serializeResponse(request, response, data, error) 
      let parsedObject = Mapper<T>().map(keyPath != nil ? result.value?[keyPath!] : result.value) 

      dispatch_async(queue ?? dispatch_get_main_queue()) { 
       completionHandler(self.request!, self.response, parsedObject, result.value ?? response.data, result.error) // Here it shows the error: Cannot convert value of type 'T?' to expected argument type '_?' 
      } 
     } 
    } 

} 

risposta

14

appena trovato la soluzione. Sembrava un problema del compilatore beta Xcode 7.1. Stava dando il problema sul parametro "parsedObject" e c'era un errore sul parametro successivo.

completionHandler(self.request!, self.response, parsedObject, **result.value ?? data**, result.error) 

Quindi, se capita di ottenere lo stesso errore, rivedere tutti gli altri parametri sono ok.

Buona fortuna.

+4

Ah ah. Fortunatamente ho visto la tua risposta presto. Questo è il tipo di bug che può richiedere ore per eseguire il debug, grazie ai messaggi di errore utili di swifts. Grazie mille – villy393

+0

"Uso di operatore non risolto '**'" :( –

+0

wow grazie, l'errore è stato sul parametro successivo anche per me (eseguendo Xcode 8.0) – aryaxt

0

Update per la risposta di mabril per Alamofire 3,0

completionHandler(response.request!, response.response, parsedObject, response.result.value ?? response.data, response.result.error) 
Problemi correlati