2015-10-02 20 views
5

Próbuję zaimplementować AlamofireObjectMapper (https://github.com/tristanhimmelman/AlamofireObjectMapper) z Alamofire 3 i najnowszą wersją ObjectMapper (https://github.com/Hearst-DD/ObjectMapper).Nie można przekonwertować wartości typu "T?" spodziewany typ argumentu "_?" - Typowe typy i bloki zakończenia

Wygląda na to, że AlamofireObjectMapper nie został zaktualizowany do pracy z Alamofire 3, więc próbuję to zrobić samodzielnie.

Przyszedłem do tego kawałka kodu, a teraz utknąłem.

Wygląda na to, że Typowy T nie jest dostępny w bloku zakończenia odpowiedzi. Czy zmiana 1 lub zmiana Swift 2.1 to zmiana?

Jest to błąd:

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 '_?' 
      } 
     } 
    } 

} 

Odpowiedz

14

Wystarczy znaleźć rozwiązanie. Wydawało się, że jest to problem z kompilatorem beta Xcode 7.1. Dał problem z parametrem "parsedObject" i wystąpił błąd w następnym parametrze.

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

Jeśli wystąpi ten sam błąd, sprawdź wszystkie pozostałe parametry.

Powodzenia.

+4

ha ha. Na szczęście wcześniej dostrzegłem twoją odpowiedź. Jest to rodzaj błędu, który może zająć kilka godzin, aby debugować dzięki pomocy przydatnych komunikatów o błędach. Wielkie dzięki – villy393

+0

"Korzystanie z nierozwiązanego operatora '**'" :( –

+0

wow, dzięki, błąd był dla mnie również dla następnego parametru (z uruchomionym Xcode 8.0) – aryaxt

0

Aktualizacja odpowiedź mabril za Alamofire 3,0

completionHandler(response.request!, response.response, parsedObject, response.result.value ?? response.data, response.result.error) 
Powiązane problemy