Kann mir jemand erklären, warum das nicht funktioniert?Der generische Parameter T konnte nicht abgeleitet werden. Factory-Methoden
Ich habe eine Klasse mit Factory-Methoden wie folgt aus:
public class NetworkTask<T> {
var request: URLRequest
var completionHandler: NetworkResponse<T> -> Void
init(request: URLRequest, completionHandler: NetworkResponse<T> -> Void) {
self.request = request
self.completionHandler = completionHandler
}
static func dataResponseTaskWithRequest(request: URLRequest, completionHandler: NetworkResponse<NSData> -> Void) -> NetworkTask<NSData> {
return NetworkTask<NSData>(request: request, completionHandler: completionHandler)
}
static func mappedObjectResponseTaskWithRequest<MappedType>(request: URLRequest, completionHandler: NetworkResponse<MappedType> -> Void) -> NetworkTask<MappedType> {
return NetworkTask<MappedType>(request: request, completionHandler: completionHandler)
}
}
Dann, nach glücklich zu wissen, dass es kompiliert, gehe ich eine Aufgabe wie diese zu erstellen:
let task = NetworkTask.dataResponseTaskWithRequest(URLRequest()) { (response) in
}
Nope ...
Rischer Parameter T nicht geschlossen werden konnte
Warte, ich kann es eindeutig ableiten, die Methode gibt NetworkTask<NSData>
zurück, also ist T NSData.
Ok ... dann, vielleicht so?
let task: NetworkTask<NSData> = NetworkTask.dataResponseTaskWithRequest(URLRequest()) { (response) in
}
Nope ...
nicht 'dataResponseTaskWithRequest' mit einem Argument Liste vom Typ '(URLRequest, (_) -> _)' Kann aufrufen
Ok, vielleicht die andere Methode:
let task = NetworkTask.mappedObjectResponseTaskWithRequest(URLRequest()) { (response: NetworkResponse<String>) in
}
Nope ...
Wert kann nicht vom Typ umwandeln '(NetworkResponse) ->()' zu erwarten Argument Typ 'NetworkResponse < _> -> Void'
ich eindeutig etwas hier, weil der Compiler fehlt kann werden müssen‘ Ich habe so viele Fehler. Hat jemand eine Ahnung?
Das ist absolut richtig. In meinem Fall schlägt es den Punkt, also habe ich eine TaskBuilder-Klasse mit den statischen Methoden erstellt. Dieser Ansatz scheint gut zu funktionieren. Ich danke Ihnen sehr für Ihre Antwort. – diegomontoyas